在我正在阅读的一本书(JavaScript 和 JQuery - Jon Duckett 的交互式前端开发)中有一个有趣的错误或者(至少我是这么认为的)它不会阻止代码工作:
for (var i = [0]; i < options.length; i++) {
addEvent(options[i], 'click', radioChanged);
}
这是脚本的一部分,它循环遍历表单中的所有单选按钮并附加一个事件监听器(它做什么并不重要)。
但是……
为什么我要初始化为一个数组?
为什么递增有效?
为什么整个循环都有效?
当然,如果您将 var i = [0] 替换为 var i = 0,代码仍然有效。
当您添加一些警报以检查循环的每次迭代中 i 的值和 i 的类型时,在第二次迭代时 i 的类型从对象(毕竟在第一次迭代中它是一个数组)变为数字. 这是我迄今为止从未遇到过的一种隐式类型转换(谷歌帮助不大)。任何人都可以解释幕后发生的事情吗?
for (var i = [0]; i < options.length; i++) {
addEvent(options[i], 'click', radioChanged);
alert(i); // --> 1 2 3 ...
alert(type of i); // --> object number number ...
}
最佳答案
规范 says (§ 11.3.1) ++
运算符在递增之前将其操作数转换为数字:
- Let oldValue be
ToNumber
(GetValue
(lhs)).
当在对象上调用时,GetValue
内部操作将调用 toString()
,对于数组,它将连接其元素,返回 '0 '
。
关于javascript - var i = [0] 在 for 循环中,然后递增 i++ - 为什么它有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382569/