【发布时间】:2015-11-29 16:45:10
【问题描述】:
在我正在阅读的一本书(Jon Duckett 的 JavaScript 和 JQuery - 交互式前端开发)中有一个有趣的错误或(至少我认为是这样)并没有阻止代码工作:
for (var i = [0]; i < options.length; i++) {
addEvent(options[i], 'click', radioChanged);
}
这是脚本的一部分,它循环遍历表单中的所有单选按钮并附加一个事件侦听器(它的作用并不重要)。
但是……
为什么我被初始化为一个数组?
为什么增量会起作用?
为什么整个循环会起作用?
当然,如果您将 var i = [0] 替换为 var i = 0,代码仍然有效。
当您添加一些警报以检查循环的每次迭代中 i 的值和 i 的类型时,在第二次迭代中 i 的类型从 object(毕竟在第一次迭代中它是一个数组)更改为 number . 这是迄今为止我从未遇到过的一种隐式类型转换(谷歌并没有多大帮助)。谁能解释一下幕后发生了什么?
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 ...
}
【问题讨论】:
标签: javascript for-loop type-conversion