Chrome开发者工具控制台数组长度显示不一致原因咨询
为什么Chrome控制台里数组摘要长度和展开后不一致?
嘿,这个问题我之前也踩过坑,其实大概率是Chrome控制台的几个特性或者小细节在搞鬼,给你拆解下:
惰性求值是头号嫌疑
这是最常见的原因。Chrome控制台为了优化性能,不会在你调用console.log()的瞬间就把整个对象/数组的所有内容都做一份完整快照,而是先显示一个「摘要信息」(也就是你看到的数组长度1)。等你点击展开详情的时候,它才会去读取这个对象的当前实时状态。举个很典型的场景,比如你写了这样的代码:
const response = { data: [ { name: 'Alice' } ] }; console.log(response); // 此时控制台记录的摘要:data长度为1 response.data.push({ name: 'Bob' }); // 代码后续修改了数组,长度变成2等你点击展开的时候,控制台读取的已经是被修改后的数组了,自然就会看到长度是2,和一开始的摘要对不上。
如果想要查看
console.log那一刻的真实状态,你可以用深拷贝生成快照:console.log(JSON.parse(JSON.stringify(response)));或者右键控制台的log条目,选择「Store as global variable」,生成的临时变量就是log时刻的快照。
稀疏数组的特殊情况(概率较低)
如果你的数组是稀疏数组(比如只给索引1赋值,索引0是空的),有时候控制台的摘要可能会只统计有实际值的元素数量,但展开后显示的是数组真实的length属性值。不过这种情况和你的问题刚好反过来(摘要显示长度2,展开后看到1个元素),所以可能性比较低,但也可以排查下数组是不是这种情况。控制台的小bug
偶尔Chrome控制台会出现缓存或者显示异常,尤其是在频繁修改代码、异步操作较多的场景下。这时候可以试试清空控制台(点击左上角的垃圾桶图标),重新运行代码,或者重启开发者工具,一般就能恢复正常。
内容的提问来源于stack exchange,提问作者Brian Patrick Hummel
相关产品推荐
相关产品推荐

