小心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);
}
目录
相关文章
|
12月前
|
人工智能 自然语言处理 Java
【100%好礼】诚邀体验SoFlu-JavaAl开发助手,重塑AI编码价值
在这个数字化时代,软件开发任务繁重,飞算科技推出SoFlu-JavaAl开发助手,诚邀您体验AI编码新境界。它不仅生成代码,还通过自然语言理解需求,精准生成完整工程源码,大幅缩短设计工期,提升效率。SoFlu-JavaAl支持一键构建Java Maven工程,轻松合并老项目,快速响应需求变更。参与体验还有机会获多重好礼!
|
安全 程序员
|
编译器 C++
【C++类和对象】构造函数与析构函数
【C++类和对象】构造函数与析构函数
【C++类和对象】构造函数与析构函数
|
传感器 存储 缓存
Flink---10、处理函数(基本处理函数、按键分区处理函数、窗口处理函数、应用案例TopN、侧输出流)
Flink---10、处理函数(基本处理函数、按键分区处理函数、窗口处理函数、应用案例TopN、侧输出流)
HH
|
监控 网络协议 物联网
阿里云物联网平台offline离线日志原因排查
整理一下常见的离线日志offline reason,方便理清思路排查设备端离线原因。
HH
10510 15
阿里云物联网平台offline离线日志原因排查
|
机器学习/深度学习 人工智能 运维
5 分钟内开始使用异常检测算法
5 分钟内开始使用异常检测算法
248 0
|
算法 C语言
对于KMP的next数组的新发现,好像我们并不用回溯
对于KMP的next数组的新发现,好像我们并不用回溯
101 0
地震当晚,淘宝店主突然收到陌生留言:“请给我报个平安”
九寨沟地震,牵动着所有人的心。 淘宝上,有很多九寨沟人承接各种租车、住宿等旅游服务,还把牦牛肉、牛角梳子等当地特产销往全国各地。地震发生后,由于通讯和物流被中断,大部分卖家只能暂停发货,一些卖家已经疏散前往成都等地。
2546 0