首页 > 解决方案 > 为什么 console.log() 创建 /**id:4**/ 和 /**ref:4**/ 值?

问题描述

几分钟前我做了这个答案 ,答案片段如下

let obj = {staff_changes: []};
let newStaff=[];
for (let i = 0; i < 4; i++) {
 newStaff.push({id: 'staff' +i});
 obj.staff_changes.push({
  id: i,
  newStaff: newStaff
 });
}
console.log(obj);

如果你运行上面的代码片段,你可以看到/**id:4**//**ref:4**/. 这是什么?

当代码在执行时,将相同的重复值推送到数组中。所以我希望在开始的时候它会生成一个Id:4并且如果存在相同的重复值,那么它只写一个评论,比如已经生成的/**ref:4**/ where4表示。Id=:4

所以我想知道 我的理解是否正确?. 如果我的理解是正确的,那我们该如何避免呢?我应该object.assign()在将值推送到数组之前使用以避免这种情况吗?

标签: javascriptarraystypescriptfor-loopconsole.log

解决方案


您的数据结构包含对同一对象的多个引用。console.log足够聪明,可以缩写输出。

请注意(AFAIK),该规范不保证任何console.log不是 实例的对象的特定输出String,因此您不能依赖该输出在浏览器、版本、月相等之间是相同的。

考虑一个无限递归的数据结构,如const a = []; a.push(a); console.log(a),您更喜欢哪一个:您的计算机在打印无限递归数组或console.log缩写它时锁定?

const a = []
a.push(a)
console.log(a)
// [
//   /**id:1**/
//   /**ref:1**/
// ]


推荐阅读