我们在js中可能经常会用到for in来遍历对象中的属性,当然for in中得到的属性,只能是可枚举的属性,for in的时候,它会把对象的属性(包括原型的属性)遍历一遍,看面看示例就明白了
例如: 有这么一段代码: 复制代码 代码如下: var array = []; array.push(1); array.push(2); array.push(3); for(var i in array) { console.log(i+":"+array[i]); }
此时会输出什么呢?当然是0:1 1:2 2:3 但是如果在for in之前加上Array.prototype.say = "hello"; 再次运行会输出什么呢? 复制代码 代码如下: 0:1 1:2 2:3 say:hello
看到了吧,这个时候,它会输出原型的属性 在很多时候,我们不需要遍历它原型的属性,还有一个原因就是,我们现在用到的对象,我们不能保证,其他开发人员,有没有,在它的原型上加一些属性呢?所以呢,我们就过滤一下我们对象的属性吧,这个时候就用到了hasOwnProperty方法,如下: 复制代码 代码如下: for(var i in array){ if(array.hasOwnProperty(i)) { console.log(i+":"+array[i]); } }
再想想现在会输出什么呢?当然是0:1 1:2 2:3啦。 |