当前位置: 首页 > 工具软件 > Frozen > 使用案例 >

java class is frozen_Object构造函数的方法 之 Object.isFrozen()

赵智勇
2023-12-01

Object.isFrozen()

判断一个对象是否被冻结

obj

被检测的对象。

返回值

表示是否被冻结(Boolean)。

描述

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

// 一个对象默认是可扩展的,所以它是非冻结的

console.log(Object.isFrozen({})) // false

// 一个不可扩展的空对象同时也是一个冻结对象

const result = Object.preventExtensions({})

console.log(Object.isFrozen(result)) // true

// 一个非空对象默认也是非冻结的

const obj = {

p: 42

}

console.log(Object.isFrozen(obj)) // false

// 让一个对象变得不可扩展,并不意味着这个对象变成了冻结对象。

// 因为p属性仍然是可以配置的(而且是可写的)

Object.preventExtensions(obj)

console.log(Object.isFrozen(obj)) // false

// 此时,如果删除了这个属性,则它会成为一个冻结对象。

delete obj.p

console.log(Object.isFrozen(obj)) // true

// 一个不可扩展的对象,拥有一个不可写但可配置的属性,则它仍然是非冻结的

const obj1 = {

p: 42

}

Object.preventExtensions(obj1)

Object.defineProperty(obj1, 'p', { // 变得属性不可更改

writable: false

})

console.log(Object.isFrozen(obj1)) // false

// 把这个对象设置为不可配置,会让这个对象变成冻结对象

Object.defineProperty(obj1, 'p', { // 变得不可配置,属性符不能更改

configurable: false

})

console.log(Object.isFrozen(obj1)) // true

// 一个不可扩展的对象,拥有一个不可配置但可写的属性,则它仍然是非冻结的。

const obj2 = {

p: 42

}

Object.preventExtensions(obj2)

Object.defineProperty(obj2, 'p', { // 变得不可配置,属性符不能更改

configurable: false

})

console.log(Object.isFrozen(obj2)) // false

//那这个属性改为不可写。会让这个对象成为冻结对象

Object.defineProperty(obj2, 'p', { // 不可改

writable: false

})

console.log(Object.isFrozen(obj2)) // true

// 一个不可扩展的对象,值拥有一个访问器属性,则它仍然是非冻结的

const obj3 = {

get p() {

return 42

}

}

Object.preventExtensions(obj3)

console.log(Object.isFrozen(obj3)) // false

// 但是把这个属性改为不可配置,则会让这个对象变成冻结对象

Object.defineProperty(obj3, 'p', { // 变得不可配置,属性符不能更改

configurable: false

})

console.log(Object.isFrozen(obj3)) // true

// 使用Object.freeze 是冻结一个对象最方便的方法

const obj4 = {

p: 42

}

console.log(Object.isFrozen(obj4)) // false

Object.freeze(obj4)

console.log(Object.isFrozen(obj4)) // true

// Object.isSealed() 判断一个对象是否被密封

// 一个冻结对象也是一个密封对象

console.log(Object.isSealed(obj4)) // true

// Object.isExtensible 判断一个对象是否是可扩展的

// 当前更是一个不可扩展的对象

console.log(Object.isExtensible(obj4)) // false

 类似资料: