gpt4 book ai didi

javascript - var i = [0] 在 for 循环中,然后递增 i++ - 为什么它有效?

转载 作者:数据小太阳 更新时间:2023-10-29 04:38:27 26 4
gpt4 key购买 nike

在我正在阅读的一本书(JavaScript 和 JQuery - Jon Duckett 的交互式前端开发)中有一个有趣的错误或者(至少我是这么认为的)它不会阻止代码工作:

for (var i = [0]; i < options.length; i++) {         
addEvent(options[i], 'click', radioChanged);
}

这是脚本的一部分,它循环遍历表单中的所有单选按钮并附加一个事件监听器(它做什么并不重要)。

但是……

  1. 为什么我要初始化为一个数组?

  2. 为什么递增有效?

  3. 为什么整个循环都有效?

当然,如果您将 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) ++ 运算符在递增之前将其操作数转换为数字:

  1. Let oldValue be ToNumber(GetValue(lhs)).

当在对象上调用时,GetValue 内部操作将调用 toString(),对于数组,它将连接其元素,返回 '0 '

关于javascript - var i = [0] 在 for 循环中,然后递增 i++ - 为什么它有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com