JavaScript时髦的数组事故
function a() {
var b = ["b"];
console.log(b);
//console.log(b.slice());
b = b.push("bb");
}
a();
在一个“完美”的世界中,你会认为console.log
会显示["b"]
,但是非常足够显示["b", "bb"]
即使之后“bb”没有被推入。
如果你做了console.log(b.slice());
然后你会得到["b"]
所需的结果。 这是为什么? 这种并发症背后的原因是什么? 我只是想更好地理解这一点,所以我可以更好地避免它发生。
*注意我在最近的一个问题中遇到了同样的问题,但这是一个更简洁的例子。 @RightSaidFred将我引向了这一点,并且迄今为止一直是一个巨大的帮助。
编辑
JSFiddle上的可运行示例
这是console.log
一个已知问题。
在调用方法时,不要将参数转换为字符串,而是在用户界面中显示参数时将其存储并转换为字符串。 由于在函数运行时用户界面中没有任何事情发生,您将看到当您退出函数时的对象状态。
我不认为这是一个JavaScript wtf; 我认为这是一个console.log wtf。 基于我昨天看到的答案, console.log
可能会缓存您的对象。 如果用alert(b)
替换console.log(b)
,您会看到b
按预期显示。
不幸的是令人信服的console.log以可预见的方式行事并不是我想要的答案。
我假设这与console.log()
工作方式有关,但是当你说:
b = b.push("bb");
你应该可以说
b.push("bb");
链接地址: http://www.djcxy.com/p/18033.html
上一篇: Javascript Funky array mishap
下一篇: Does IE9 support console.log, and is it a real function?