小心FOR IN遍历数组

简介: From stackoverflow 查看原文var a = []; // Create a new empty array.a[5] = 5; // Perfectly legal JavaScript that resizes the array.for (var i = 0; i < a.length; i++) { // Iterate o

From stackoverflow 查看原文

var a = []; // Create a new empty array.
a[5] = 5;   // Perfectly legal JavaScript that resizes the array.

for (var i = 0; i < a.length; i++) {
  // Iterate over numeric indexes from 0 to 5, as everyone expects.
  console.log(a[i]);
}
/**
 * 输出:
 * undefined (5次)
 * 5
 */
var a = [];
a[5] = 5;
for (var x in a) {
  // Shows only the explicitly set index of "5", and ignores 0-4
  console.log(x);
}

/**
 * 输出:
 * 5
 */
// Somewhere deep in your JavaScript library...
Array.prototype.foo = 1;

// Now you have no idea what the below code will do.
var a = [1, 2, 3, 4, 5];
for (var x in a){
  // Now foo is a part of EVERY array and 
  // will show up here as a value of 'x'.
  console.log(x);
}

/**
 * 输出:
 * 0
 * 1
 * 2
 * 3
 * 4
 * foo
 */

加一个 hasOwnProperty (它可是JavaScript中唯一一个处理属性而不查找原型链的函数) 过滤一下还是可以:

if (a.hasOwnProperty(x)){
  console.log(x);
}
目录
相关文章
|
11天前
|
算法 C语言 索引
215. 数组中的第K个最大元素(时间复杂度o(n))
215. 数组中的第K个最大元素(时间复杂度o(n))
|
1月前
|
存储 C语言
【03】逆序数组
【03】逆序数组
|
2月前
|
人工智能
数组逆序
数组逆序
17 3
|
4月前
|
索引
数组下标为什么从0开始
数组下标为什么从0开始
|
4月前
遍历一维数组
遍历一维数组
34 0
|
8月前
|
前端开发
数组下标对应缺位问题
数组下标对应缺位问题
33 0
|
10月前
|
存储 算法 前端开发
三刷”数组中的第K个最大元素“,我终于学会了堆排序
三刷”数组中的第K个最大元素“,我终于学会了堆排序
46 0
|
JavaScript 前端开发
遍历数组
遍历数组
53 0
|
JavaScript 前端开发 索引
For In 遍历数组
For In 遍历数组
80 0
数据结构题:由逆置数组方法——逆置线性表L的所有元素
数据结构题:由逆置数组方法——逆置线性表L的所有元素
数据结构题:由逆置数组方法——逆置线性表L的所有元素