diff options
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/object/propertyisenumerable/index.html')
-rw-r--r-- | files/zh-cn/web/javascript/reference/global_objects/object/propertyisenumerable/index.html | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/object/propertyisenumerable/index.html b/files/zh-cn/web/javascript/reference/global_objects/object/propertyisenumerable/index.html new file mode 100644 index 0000000000..b74e6bc26b --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/object/propertyisenumerable/index.html @@ -0,0 +1,146 @@ +--- +title: Object.prototype.propertyIsEnumerable() +slug: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable +tags: + - JavaScript + - Method + - Object + - Prototype + - 对象 + - 方法 +translation_of: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable +--- +<div>{{JSRef}}</div> + +<p><code><strong>propertyIsEnumerable()</strong></code> 方法返回一个布尔值,表示指定的属性是否可枚举。</p> + +<div>{{EmbedInteractiveExample("pages/js/object-prototype-propertyisenumerable.html")}}</div> + + + +<h2 id="语法">语法</h2> + +<pre class="syntaxbox"><code><var>obj</var>.propertyIsEnumerable(<var>prop</var>)</code></pre> + +<h3 id="参数">参数</h3> + +<dl> + <dt><code>prop</code></dt> + <dd>需要测试的属性名。</dd> +</dl> + +<h3 id="返回值">返回值</h3> + +<p>用来表示指定的属性名是否可枚举的{{jsxref("Boolean", "布尔值")}}。</p> + +<h2 id="描述">描述</h2> + +<p>每个对象都有一个 <code>propertyIsEnumerable</code> 方法。此方法可以确定对象中指定的属性是否可以被 {{jsxref("Statements/for...in", "for...in")}} 循环枚举,但是通过原型链继承的属性除外。如果对象没有指定的属性,则此方法返回 <code>false</code>。</p> + +<h2 id="例子">例子</h2> + +<h3 id="propertyIsEnumerable_方法的基本用法"><code>propertyIsEnumerable</code> 方法的基本用法</h3> + +<p>下面的例子演示了 <code>propertyIsEnumerable</code> 方法在普通对象和数组上的基本用法:</p> + +<pre class="brush: js">var o = {}; +var a = []; +o.prop = 'is enumerable'; +a[0] = 'is enumerable'; + +o.propertyIsEnumerable('prop'); // 返回 true +a.propertyIsEnumerable(0); // 返回 true</pre> + +<h3 id="用户自定义对象和内置对象">用户自定义对象和内置对象</h3> + +<p>下面的例子演示了用户自定义对象和内置对象上属性可枚举性的区别.</p> + +<pre class="brush: js">var a = ['is enumerable']; + +a.propertyIsEnumerable(0); // 返回 true +a.propertyIsEnumerable('length'); // 返回 false + +Math.propertyIsEnumerable('random'); // 返回 false +this.propertyIsEnumerable('Math'); // 返回 false</pre> + +<h3 id="自身属性和继承属性">自身属性和继承属性</h3> + +<pre class="brush: js">var a = []; +a.propertyIsEnumerable('constructor'); // 返回 false + +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 + +o.property = 'is enumerable'; + +o.propertyIsEnumerable('property'); // 返回 true + +// 之所以这些会返回 false,是因为,在原型链上 propertyIsEnumerable 不被考虑 +// (尽管最后两个在 for-in 循环中可以被循环出来)。 +o.propertyIsEnumerable('prototype'); // 返回 false (根据 JS 1.8.1/FF3.6) +o.propertyIsEnumerable('constructor'); // 返回 false +o.propertyIsEnumerable('firstMethod'); // 返回 false</pre> + +<h2 id="规范">规范</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + <tr> + <td>{{SpecName('ES3')}}</td> + <td>{{Spec2('ES3')}}</td> + <td>Initial definition</td> + </tr> + <tr> + <td>{{SpecName('ES5.1', '#sec-15.2.4.7', 'Object.prototype.propertyIsEnumerable')}}</td> + <td>{{Spec2('ES5.1')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ES6', '#sec-object.prototype.propertyisenumerable', 'Object.prototype.propertyIsEnumerable')}}</td> + <td>{{Spec2('ES6')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-object.prototype.propertyisenumerable', 'Object.prototype.propertyIsEnumerable')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="浏览器兼容性">浏览器兼容性</h2> + +<div class="hidden">The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</div> + +<p>{{Compat("javascript.builtins.Object.propertyIsEnumerable")}}</p> + +<h2 id="相关链接">相关链接</h2> + +<ul> + <li><a href="/zh-CN/docs/Enumerability_and_ownership_of_properties">属性的可枚举性和所有权</a></li> + <li>{{jsxref("Statements/for...in", "for...in")}}</li> + <li>{{jsxref("Object.keys()")}}</li> + <li>{{jsxref("Object.defineProperty()")}}</li> +</ul> |