javascript - 从.split()生成的Google Chrome混乱数组

use*_*716 4 javascript arrays split google-chrome properties

给出以下字符串:

var str = "one,two,three";
Run Code Online (Sandbox Code Playgroud)

如果我在逗号上拆分字符串,我通常会得到一个数组,如预期的那样:

var arr = str.split(/\s*,\s*/);
Run Code Online (Sandbox Code Playgroud)

麻烦的是,在Google Chrome(适用于Mac)中,它会向阵列添加额外的属性.

Chrome调试器的输出:

arr: Array
    0: one
    1: two
    2: three
    constructor: function Array()
    index: undefined
    input: undefined
    length: 3
Run Code Online (Sandbox Code Playgroud)

因此,如果我使用循环遍历数组for/in,它将迭代新属性.特别是inputindex属性.使用hasOwnProperty似乎没有帮助.

修复方法是for根据数组的长度进行循环.我仍然想知道是否有人深入了解Chrome的行为方式.Firefox和Safari没有这个问题.

And*_*y E 11

不要使用for...in循环遍历数组!! 这是Javascript(插件)的许多缺陷之一- for...in循环仅用于迭代对象属性.

请使用normal for循环.

for (var i=0, max = arr.length; i < max; i++) { ... } 
Run Code Online (Sandbox Code Playgroud)


Firefox和Safari的ECMAScript/Javascript引擎使这些特定属性不可枚举({DontEnum}属性),因此它们不会在for...in循环中迭代.但是,for...in循环并不打算迭代数组索引.