ran*_*mor 12 javascript internet-explorer-8
所以我在IE8中使用它:
var hi=["hi", "lo", "foo", "bar"];
for(i in hi){console.log(i)};
//WTF is that indexOf i value?
LOG: 0
LOG: 1
LOG: 2
LOG: 3
LOG: indexOf
undefined
Run Code Online (Sandbox Code Playgroud)
在chrome和其他人中,我只会得到0-3,没有神秘的"indexOf"的东西.为什么以及解决了什么?
ben*_*tah 23
不要for...in
用于数组.for
在这种情况下,最好使用传统的循环.
原因是因为for...in
将数组视为一个对象,因此属性喜欢indexOf
或length
可能包含在循环中.普通for
循环只处理数字键,因此避免了这个问题.
另外,在迭代普通对象时也会出现不需要的属性(正如其他人所说,添加到对象原型的属性会显示出来).你可以通过for...in
这种方式编写循环来解决这个问题:
var obj = { ... };
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
var item = obj[prop];
...
}
}
Run Code Online (Sandbox Code Playgroud)
但要清楚:您仍然不应该在数组上使用此方法.
您正在为数组使用错误类型的循环 - for ... in ...
还将包括对象的任何可枚举属性,在您的情况下包括该.indexOf()
方法.
请改用:
var i, n = hi.length;
for (i = 0; i < n; ++i) {
console.log(i, hi[i]);
}
Run Code Online (Sandbox Code Playgroud)
Chrome和其他最新的浏览器实现ECMAScript 5,并将所有内置方法正确标记为不可枚举的属性.
归档时间: |
|
查看次数: |
6482 次 |
最近记录: |