为了账号安全,请及时绑定邮箱和手机立即绑定

Google Chrome console.log()与对象和数组不一致

Google Chrome console.log()与对象和数组不一致

潇湘沐 2019-08-09 09:59:21
Google Chrome console.log()与对象和数组不一致今天我正在帮助同事调试一些代码,我注意到console.log()谷歌Chrome中有一个奇怪的行为:如果您:创建一个嵌套数组(例如,[[345,“test”]])使用将数组记录到控制台console.log()。修改其中一个内部数组值,然后console.log()输出后面的值 - 而不是console.log()执行时数组的值。JavaScript:var test = [[2345235345,"test"]]console.log(test);test[0][0] = 1111111;// outputs: [[1111111,"test"]]var testb = {};testb.test = "test";console.log(testb);testb.test = "sdfgsdfg";// outputs: {"testb":"test"}var testc = ["test","test2"];console.log(testc);testc[0] = "sdxfsdf";// outputs: ["test","test2"]JSFiddle示例在Firefox中不会发生此行为。另外需要注意的是,如果我在Chrome调试器中逐行浏览他的代码,那么console.log()会输出正确的值。这个奇怪的现象是否有解释,还是仅仅是Google Chrome的错误?编辑:我已经缩小了重现不一致console.log()行为的步骤:如果您将此脚本添加到您的页面:var greetings=['hi','bye'];console.log(greetings);setTimeout(function(){     greetings.push('goodbye');},3000);并在Chrome 控制台窗口已打开的情况下在新窗口中打开它,然后console.log()输出将与在控制台窗口关闭时加载页面的输出不同。这是一个证明这一点的JSFiddle。在第一种情况下,控制台窗口已经打开,console.log()将输出数组的当前值(即两个项目)。在第二种情况下,控制台窗口最初关闭并仅在页面加载后打开,console.log()将输出数组的后续值(即三个项目)。这是Google Chrome的console.log()功能中的错误吗?
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

我找到了这个bug /功能的解决方法。

console.log(JSON.parse(JSON.stringify(myObject)));

编辑:不幸的是,这对于像函数这样的非原始值不起作用。在此使用其他克隆实用程序

jQuery示例:

console.log($.extend({}, myObject));


查看完整回答
反对 回复 2019-08-09
  • 2 回答
  • 0 关注
  • 638 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号