Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 变量i=[0]在for循环中,然后递增i++;-它为什么有效?_Javascript_For Loop_Type Conversion - Fatal编程技术网

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

Javascript 变量i=[0]在for循环中,然后递增i++;-它为什么有效?,javascript,for-loop,type-conversion,Javascript,For Loop,Type Conversion,在我正在读的一本书(Jon Duckett的JavaScript&JQuery-交互式前端开发)中,有一个有趣的错误,或者(至少我认为是这样),它不会阻止代码工作: for (var i = [0]; i < options.length; i++) { addEvent(options[i], 'click', radioChanged); } for(var i=[0];i对象编号。。。 } 说明++运算符在递增之前将其操作数转换为数字的规范:

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

for (var i = [0]; i < options.length; i++) {         
   addEvent(options[i], 'click', radioChanged);       
}
for(var i=[0];i
这是脚本的一部分,它循环遍历表单中的所有单选按钮并附加一个事件侦听器(不管它做什么)

但是

  • 为什么我要初始化为数组

  • 为什么增量有效

  • 为什么整个循环都能工作

  • 当然,如果用VARI=0替换VARI=[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 ...
    }
    
    for(var i=[0];i1 2 3。。。
    警报(i类型);//-->对象编号。。。
    }
    
    说明
    ++
    运算符在递增之前将其操作数转换为数字的规范:

  • 让oldValue为
    ToNumber
    GetValue
    (lhs))

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

    @Tadek:这更像是一个令人困惑的功能。规范这样说是为了增加
    '1'
    将导致
    2
    ,而不是
    '11'