对于for..in中检测到的属性,propertyIsEnumerable记录为false

时间:2019-07-13 16:56:34

标签: javascript

我正在尝试了解Enumerability and ownership of properties。它说:

  

可枚举的属性以for ... in循环显示,除非该属性的键是Symbol。

这是我正在使用的代码:

function Car() {
  this.name = 'BMW';
}

Car.prototype.year = 1998;


var bmw = new Car();


for( var prop in bmw ) {
  console.log( prop )
}

// name
// year

console.log( bmw.propertyIsEnumerable( 'name' ) ) // true
console.log( bmw.propertyIsEnumerable( 'year' ) ) // false

为什么bmw.propertyIsEnumerable( 'year' )检测到false时记录for..in

2 个答案:

答案 0 :(得分:1)

Object.prototype.propertyIsEnumerable()

  

每个对象都有一个MapView方法。此方法可以确定对象中的指定属性是否可以通过ios Object { "latitude": 0, "latitudeDelta": 0.00922, "longitude": 0, "longitudeDelta": 0.00421, "showMarker": false, } ios Object { "accuracy": 0.05, "latitude": 37.33233141, "latitudeDelta": 0.0004491555874955085, "longitude": -122.0312186, "longitudeDelta": -0.05737702242408729, } ios setting region for The White House, Pennsylvania Avenue Northwest, D.C., DC, USA ios Object { "accuracy": 0.05, "latitude": 38.8976763, "latitudeDelta": 0.000898311174991017, "longitude": -77.0365298, "longitudeDelta": 0.17264947916413242, "showMarker": true, } Running application on Android SDK built for x86. android Object { "latitude": 0, "latitudeDelta": 0.00922, "longitude": 0, "longitudeDelta": 0.00421, "showMarker": false, } android Object { "accuracy": 0.05, "latitude": 37.4219983, "latitudeDelta": 0.0004491555874955085, "longitude": -122.084, "longitudeDelta": 0.050048885430764016, } android setting region for The White House, Pennsylvania Avenue Northwest, D.C., DC, USA android Object { "accuracy": 0.05, "latitude": 38.8976763, "latitudeDelta": 0.000898311174991017, "longitude": -77.0365298, "longitudeDelta": 0.17264947916413248, "showMarker": true, } 循环枚举,通过原型链继承的属性除外。如果对象不具有指定的属性,则此方法返回propertyIsEnumerable

for...in

来源:Object.prototype.propertyIsEnumerable() - JavaScript | MDN

答案 1 :(得分:1)

propertyIsEnumerable确实为从原型链继承的属性返回false(一个例外),其中for ... in也在从原型继承的属性上循环

  

每个对象都有一个propertyIsEnumerable方法。这种方法可以   确定对象中的指定属性是否可以   由for ... in循环枚举,但属性除外   通过原型链继承。如果对象没有   指定的属性,此方法返回false

MDN ref