Tad*_*dek 7 javascript for-loop type-conversion
在我正在阅读的一本书中(JavaScript和JQuery - Jon Duckett的交互式前端开发),有一个有趣的错误或(至少我认为是这样)并不能阻止代码工作:
for (var i = [0]; i < options.length; i++) {
addEvent(options[i], 'click', radioChanged);
}
Run Code Online (Sandbox Code Playgroud)
这是脚本的一部分,它遍历表单中的所有单选按钮并附加事件监听器(它的作用并不重要).
但...
为什么我初始化为数组?
为什么增量有效?
为什么整个循环工作?
当然,如果用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 ...
}
Run Code Online (Sandbox Code Playgroud)
该规范指出(第11.3.1)该++
经营者增加前的操作数转换为数字:
- 让oldValue成为
ToNumber
(GetValue
(lhs)).
当调用一个对象时,GetValue
内部操作将调用toString()
,对于一个数组,它将连接其元素,返回'0'
.