美文网首页
for...in 和 Object.hasOwnProperty

for...in 和 Object.hasOwnProperty

作者: IamaStupid | 来源:发表于2020-06-30 14:57 被阅读0次

for...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。

提示:for...in不应该用于迭代一个 Array,其中索引顺序很重要。

hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。

先看一段hasOwnProperty的代码,它检查的就是一个对象自身直属拥有的属性是否存在:

o = new Object();
o.b={};
o.b.prop="";
o.hasOwnProperty('prop'); // 返回 false
o.prop = undefined;
o.hasOwnProperty('prop'); // 返回 true
delete o.prop;
o.hasOwnProperty('prop'); // 返回 false

再看一段代码:

var triangle = {a: 1, b: 2, c: 3, d:function(){}};

function ColoredTriangle() {
  this.color = 'red';
}

ColoredTriangle.prototype = triangle;

var obj = new ColoredTriangle();
for (var prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}
// "obj.color = red"
// "obj.a= 1"
// "obj.b= 2"
// "obj.c= 3"
// "obj.d= ƒ (){}"

for (var prop in obj) {
  if (obj.hasOwnProperty(prop)) {
    console.log(`obj.${prop} = ${obj[prop]}`);
  } 
}
// "obj.color = red"

如代码:因为a,b,c不是obj对象自身拥有的属性,所以会过滤掉属性a,b,c。
同时,也可以看到,for...in循环不但会循环对象自身的属性color,还会循环原型对象的属性。

下面的代码打印什么?
Object.prototype.objCustom = function() {}; 
Array.prototype.arrCustom = function() {};

let iterable = [3, 5, 7];
iterable.foo = 'hello';

for (let i in iterable) {
  console.log(i); 
}

// 0, 1, 2, "foo", "arrCustom", "objCustom"

相关文章

  • for...in 和 Object.hasOwnProperty

    for...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。 提示:for...in不应该用于迭代...

  • 散记(二)

    hasOwnProperty()方法 语法 object.hasOwnProperty(proName)其中,ob...

  • for...in和for...of

    for...in 适合遍历对象/数组对象循环得到的是索引值,且是字符串类型的,普通for循环得到的索引值是数字类型...

  • for...in 和for...of

    在JavaScript中遍历数组通常是使用for循环,自ES5发布后也可以使用forEach,另外在ES5具有遍历...

  • 循环(第11篇)

    Python里有两种循环:for...in循环,和while循环。# for...in Python会依次把列表中...

  • js的 for...in 和 for...of的用法

    for...in和for...of两个遍历 for...in是es5标准,用来遍历key值,遍历对象和数组 for...

  • for与for...in、for Each和map和for of

    //for与for...in的区别:1、相同点:for 能遍历有固定长度和固定次数的数组等。for...in 也能...

  • js for...of和for...in

    上代码先遍历某个对象 再遍历一个数组 for in 的特点 结合上面的两个例子,分析得出: for ... in ...

  • ES6 属性的遍历

    ES6 一共有 5 种方法可以遍历对象的属性。 (1)for...in for...in循环遍历对象自身的和继承的...

  • ES6 一共有 5 种方法可以遍历对象的属性。

    ES6 一共有 5 种方法可以遍历对象的属性。 (1)for...in for...in循环遍历对象自身的和继承的...

网友评论

      本文标题:for...in 和 Object.hasOwnProperty

      本文链接:https://www.haomeiwen.com/subject/hzlxqktx.html