javascript - 为什么 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()
在将值推送到数组之前使用以避免这种情况吗?
解决方案
您的数据结构包含对同一对象的多个引用。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**/
// ]
推荐阅读
- spring-boot - 从 spring 使用带有安全标头的 SOAP Web 服务
- runtime-error - “短信传输被拒绝” m590 设备
- sql - SQL - 比较连续记录
- prettier - 在 [ ] / 数组之后停止单行格式?
- php - 如何在 SQL 查询中将 bindValue 与 LIKE 运算符一起使用?
- ruby-on-rails - 正则表达式 Ruby - 字符串后不跟“/”
- javascript - 为什么我的函数在 NodeJS 中返回 null,Sequelize
- php - Python - Flask API 响应无法 json_decode
- driver - FT_SetFlowControl 在没有有效枚举值的情况下工作
- android - 删除白色背景并拥有全尺寸的应用程序图标?