Object.prototype.propertyIsEnumerable()

3 位贡献者:

概述

propertyIsEnumerable() 方法返回一个布尔值,表明指定的属性名是否是当前对象可枚举的自身属性。

语法

obj.propertyIsEnumerable(prop)

参数

prop
需要测试的属性名。

描述

每个对象都有 propertyIsEnumerable 方法。该方法可以判断出指定的属性是否是自身的可枚举属性,也就是说该属性是否可以通过 for...in 循环等遍历到,不过有些属性虽然可以通过 for...in 循环遍历到,但因为它们不是自身属性,而是从原型链上继承的属性,所以该方法也会返回false。如果对象没有指定的属性,该方法返回 false

例子

例子: propertyIsEnumerable方法的基本用法

下面的例子演示了propertyIsEnumerable方法在普通对象和数组上的基本用法:

var o = {};
var a = [];
o.prop = '我是个可枚举属性';
a[0] = '我是个可枚举属性';

o.propertyIsEnumerable('prop');   // 返回true
a.propertyIsEnumerable(0);        // 返回true

例子: 用户自定义对象和引擎内置对象

下面的例子演示了用户自定义对象和引擎内置对象上属性可枚举性的区别.

var a = ['我是个可枚举属性'];

a.propertyIsEnumerable(0);          // 返回true
a.propertyIsEnumerable('length');   // 返回false

Math.propertyIsEnumerable('random');   // 返回false
this.propertyIsEnumerable('Math');     // 返回false

例子: 自身属性和继承属性

var a = [];
a.propertyIsEnumerable('constructor');         // 返回false,constructor不是自身属性

function firstConstructor() {
  this.property = 'is not enumerable';
}

firstConstructor.prototype.firstMethod = function () {};

function secondConstructor() {
  this.method = function method() { return 'is enumerable'; };
}

secondConstructor.prototype = new firstConstructor;
secondConstructor.prototype.constructor = secondConstructor;

var o = new secondConstructor();
o.arbitraryProperty = 'is enumerable';

o.propertyIsEnumerable('arbitraryProperty');   // 返回true
o.propertyIsEnumerable('method');              // 返回true
o.propertyIsEnumerable('property');            // 返回false,property是继承属性

o.property = 'is enumerable';

o.propertyIsEnumerable('property');            // 返回true

// 继承属性都返回false
o.propertyIsEnumerable('prototype'); // 返回false 
o.propertyIsEnumerable('constructor'); // 返回false
o.propertyIsEnumerable('firstMethod'); // 返回false

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Gecko-specific notes

  • 从 JavaScript 1.8.1 (in Firefox 3.6) 开始,propertyIsEnumerable("prototype")返回 false,不再是 true;这与 ECMAScript 5 的结果一致。

相关链接

文档标签和贡献者

向此页面作出贡献: teoli, AlexChao, ziyunfei
最后编辑者: teoli,