diff options
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/object/isfrozen/index.html')
| -rw-r--r-- | files/zh-cn/web/javascript/reference/global_objects/object/isfrozen/index.html | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/object/isfrozen/index.html b/files/zh-cn/web/javascript/reference/global_objects/object/isfrozen/index.html new file mode 100644 index 0000000000..5ab6d88862 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/object/isfrozen/index.html @@ -0,0 +1,153 @@ +--- +title: Object.isFrozen() +slug: Web/JavaScript/Reference/Global_Objects/Object/isFrozen +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isFrozen +--- +<div>{{JSRef}}</div> + +<p><code><strong>Object.isFrozen()</strong></code>方法判断一个对象是否被{{jsxref("Object.freeze()", "冻结", "", 1)}}。</p> + +<h2 id="Syntax" name="Syntax">语法</h2> + +<pre class="syntaxbox"><code>Object.isFrozen(<var>obj</var>)</code></pre> + +<h3 id="Parameters" name="Parameters">参数</h3> + +<dl> + <dt><code>obj</code></dt> + <dd>被检测的对象。</dd> + <dt> + <h3 id="返回值">返回值</h3> + </dt> + <dd>表示给定对象是否被冻结的{{jsxref("Boolean")}}。</dd> +</dl> + +<h2 id="Description" name="Description">描述</h2> + +<p>一个对象是冻结的是指它不可{{jsxref("Object.isExtensible", "扩展")}},所有属性都是不可配置的,且所有数据属性(即没有getter或setter组件的访问器的属性)都是不可写的。</p> + +<h2 id="Examples" name="Examples">例子</h2> + +<pre class="brush: js">// 一个对象默认是可扩展的,所以它也是非冻结的. +Object.isFrozen({}); // === false + +// 一个不可扩展的空对象同时也是一个冻结对象. +var vacuouslyFrozen = Object.preventExtensions({}); +Object.isFrozen(vacuouslyFrozen) //=== true; + +// 一个非空对象默认也是非冻结的. +var oneProp = { p: 42 }; +Object.isFrozen(oneProp) //=== false + +// 让这个对象变的不可扩展,并不意味着这个对象变成了冻结对象, +// 因为p属性仍然是可以配置的(而且可写的). +Object.preventExtensions(oneProp); +Object.isFrozen(oneProp) //=== false + +// 此时,如果删除了这个属性,则它会成为一个冻结对象. +delete oneProp.p; +Object.isFrozen(oneProp) //=== true + +// 一个不可扩展的对象,拥有一个不可写但可配置的属性,则它仍然是非冻结的. +var nonWritable = { e: "plep" }; +Object.preventExtensions(nonWritable); +Object.defineProperty(nonWritable, "e", { writable: false }); // 变得不可写 +Object.isFrozen(nonWritable) //=== false + +// 把这个属性改为不可配置,会让这个对象成为冻结对象. +Object.defineProperty(nonWritable, "e", { configurable: false }); // 变得不可配置 +Object.isFrozen(nonWritable) //=== true + +// 一个不可扩展的对象,拥有一个不可配置但可写的属性,则它仍然是非冻结的. +var nonConfigurable = { release: "the kraken!" }; +Object.preventExtensions(nonConfigurable); +Object.defineProperty(nonConfigurable, "release", { configurable: false }); +Object.isFrozen(nonConfigurable) //=== false + +// 把这个属性改为不可写,会让这个对象成为冻结对象. +Object.defineProperty(nonConfigurable, "release", { writable: false }); +Object.isFrozen(nonConfigurable) //=== true + +// 一个不可扩展的对象,值拥有一个访问器属性,则它仍然是非冻结的. +var accessor = { get food() { return "yum"; } }; +Object.preventExtensions(accessor); +Object.isFrozen(accessor) //=== false + +// ...但把这个属性改为不可配置,会让这个对象成为冻结对象. +Object.defineProperty(accessor, "food", { configurable: false }); +Object.isFrozen(accessor) //=== true + +// 使用Object.freeze是冻结一个对象最方便的方法. +var frozen = { 1: 81 }; +Object.isFrozen(frozen) //=== false +Object.freeze(frozen); +Object.isFrozen(frozen) //=== true + +// 一个冻结对象也是一个密封对象. +Object.isSealed(frozen) //=== true + +// 当然,更是一个不可扩展的对象. +Object.isExtensible(frozen) //=== false + +</pre> + +<h2 id="注意">注意</h2> + +<p>在 ES5 中,如果参数不是一个对象类型,将抛出一个{{jsxref("TypeError")}}异常。在 ES2015 中,非对象参数将被视为一个冻结的普通对象,因此会返回<code>true</code>。</p> + +<pre class="brush: js">Object.isFrozen(1); +// TypeError: 1 is not an object (ES5 code) + +Object.isFrozen(1); +// true (ES2015 code) +</pre> + +<h2 id="规范" style="margin-bottom: 20px; line-height: 30px;">规范</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('ES5.1', '#sec-15.2.3.12', 'Object.isFrozen')}}</td> + <td>{{Spec2('ES5.1')}}</td> + <td>Initial definition.<br> + Implemented in JavaScript 1.8.5</td> + </tr> + <tr> + <td>{{SpecName('ES6', '#sec-object.isfrozen', 'Object.isFrozen')}}</td> + <td>{{Spec2('ES6')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-object.isfrozen', 'Object.isFrozen')}}</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.isFrozen")}}</p> + +<h2 id="See_also" name="See_also">相关链接</h2> + +<ul> + <li>{{jsxref("Object.freeze()")}}</li> + <li>{{jsxref("Object.preventExtensions()")}}</li> + <li>{{jsxref("Object.isExtensible()")}}</li> + <li>{{jsxref("Object.seal()")}}</li> + <li>{{jsxref("Object.isSealed()")}}</li> +</ul> |
