javascript console.log() 带来的疑惑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript console.log() 带来的疑惑相关的知识,希望对你有一定的参考价值。
这两天在写插件的时候无意间就被 console.log() 给坑到了。
看下面这个例子:
var obj = {‘k1‘:[1,2,3], ‘k2‘:[2,3,4]} console.log( obj ) // {‘k1‘:[0,2,3], ‘k2‘:[2,3,4]} console.log( obj.k1 ) // [1,2,3] obj[‘k1‘] = [0,2,3] console.log( obj ) // {‘k1‘:[0,2,3], ‘k2‘:[2,3,4]} console.log( obj.k1 ) // [0,2,3]
是不是很奇怪, 未赋值之前的console.log() 居然显示赋值后的状态。 最坑的是数组对象居然没有受到影响,依然显示正常顺序的值! 我心里就想吧,obj 和 obj[‘k1‘] 都是对象,为什么 obj 就奇怪点? 我甚至还想到了 引用传值,作用域声明。真是伤脑筋!
最后还是请教一位同事发现是 console.log() 的问题。
然后就换了 alert()
当然 alert() 直接打印不出来对象,那就使用 alert( JSON.stringify() ),可以正常显示,后来试了
console.log( JSON.stringify(obj) ) 也可以
var obj = {‘k1‘:[1,2,3], ‘k2‘:[2,3,4]} console.log( JSON.stringify(obj) ) // {‘k1‘:[1,2,3], ‘k2‘:[2,3,4]} console.log( JSON.stringify(obj.k1) ) // [1,2,3] obj[‘k1‘] = [0,2,3] console.log( JSON.stringify(obj.k1) ) // {‘k1‘:[0,2,3], ‘k2‘:[2,3,4]} console.log( JSON.stringify(obj) ) // [0,2,3]
如果想显示对象还可以长这样:
console.log( JSON.parse(JSON.stringify(obj)) )
好吧,这真是个不小的坑!
搜了一下发现: console.log
将在最后一个执行状态显示对象,而不是在调用 console.log
的状态。
最后还是不明白,为什么 obj 和 obj.k1 同为对象, console.log() 打印不同?
以上是关于javascript console.log() 带来的疑惑的主要内容,如果未能解决你的问题,请参考以下文章
javascript console.log() 带来的疑惑
如何在 JavaScript 中将 console.log 内容作为字符串获取