我正在尝试了解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
?
答案 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