在线文档教程

Object.isFrozen

Object.isFrozen

Object.isFrozen()方法判断一个对象是否被冻结。

语法

Object.isFrozen(obj)

参数

obj被检测的对象。

返回值

表示给定对象是否被冻结的Boolean

描述

一个对象是冻结的是指它不可扩展,所有属性都是不可配置的,且所有数据属性(即没有getter或setter组件的访问器的属性)都是不可写的。

例子

// A new object is extensible, so it is not frozen. Object.isFrozen{} // === false // An empty object which is not extensible // is vacuously frozen. var vacuouslyFrozen = Object.preventExtensions{} Object.isFrozen(vacuouslyFrozen // === true // A new object with one property is also extensible, // ergo not frozen. var oneProp = { p: 42 }; Object.isFrozen(oneProp // === false // Preventing extensions to the object still doesn't // make it frozen, because the property is still // configurable (and writable). Object.preventExtensions(oneProp Object.isFrozen(oneProp // === false // ...but then deleting that property makes the object // vacuously frozen. delete oneProp.p; Object.isFrozen(oneProp // === true // A non-extensible object with a non-writable // but still configurable property is not frozen. var nonWritable = { e: 'plep' }; Object.preventExtensions(nonWritable Object.defineProperty(nonWritable, 'e', {   writable: false } // make non-writable Object.isFrozen(nonWritable // === false // Changing that property to non-configurable // then makes the object frozen. Object.defineProperty(nonWritable, 'e', {   configurable: false } // make non-configurable Object.isFrozen(nonWritable // === true // A non-extensible object with a non-configurable // but still writable property also isn't frozen. var nonConfigurable = { release: 'the kraken!' }; Object.preventExtensions(nonConfigurable Object.defineProperty(nonConfigurable, 'release', {   configurable: false } Object.isFrozen(nonConfigurable // === false // Changing that property to non-writable // then makes the object frozen. Object.defineProperty(nonConfigurable, 'release', {   writable: false } Object.isFrozen(nonConfigurable // === true // A non-extensible object with a configurable // accessor property isn't frozen. var accessor = { get food() { return 'yum'; } }; Object.preventExtensions(accessor Object.isFrozen(accessor // === false // ...but make that property non-configurable // and it becomes frozen. Object.defineProperty(accessor, 'food', {   configurable: false } Object.isFrozen(accessor // === true // But the easiest way for an object to be frozen // is if Object.freeze has been called on it. var frozen = { 1: 81 }; Object.isFrozen(frozen // === false Object.freeze(frozen Object.isFrozen(frozen // === true // By definition, a frozen object is non-extensible. Object.isExtensible(frozen // === false // Also by definition, a frozen object is sealed. Object.isSealed(frozen // === true

注意

在 ES5 中,如果参数不是一个对象类型,将抛出一个TypeError异常。在 ES2015 中,非对象参数将被视为一个冻结的普通对象,因此会返回true

Object.isFrozen(1 // TypeError: 1 is not an object (ES5 code) Object.isFrozen(1 // true (ES2015 code)

规范

SpecificationStatusComment
ECMAScript 5.1 (ECMA-262)The definition of 'Object.isFrozen' in that specification.StandardInitial definition. Implemented in JavaScript 1.8.5.
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Object.isFrozen' in that specification.Standard
ECMAScript Latest Draft (ECMA-262)The definition of 'Object.isFrozen' in that specification.Living Standard

浏览器兼容

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support6(Yes)49125.1

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)

See also

  • Object.freeze()

  • Object.preventExtensions()

  • Object.isExtensible()

  • Object.seal()

  • Object.isSealed()

Edit this page on MDN

© 2005–2017 Mozilla Developer Network and individual contributors.

Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen