在ES5中Object.freeze的效果可以被逆转吗?

Can the effect of Object.freeze be reversed in ES5?

本文关键字:逆转 ES5 Object freeze      更新时间:2023-09-26

一旦我这样做:

var x = { };
Object.freeze( x );

有办法修改x吗?谢谢。

不能从冻结对象的属性集中添加或删除任何内容对象。任何这样做的尝试都会失败,要么是无声地失败,要么是抛出失败TypeError异常(最常见,但不是唯一的)严格模式)。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze

你可以这样想:

if( typeof ChuckNorris === 'undefined' ) {
    ChuckNorris = Object.create( [Infinity], {
        canCountTo: {
            value: Infinity * 2,
            writable: true,
            configurable: true
        }
    });
    Object.freeze( ChuckNorris ); // nothing can harm Chuck anymore !
}
console.log( ChuckNorris.canCountTo );  // Infinity
delete ChuckNorris.canCountTo;
console.log( ChuckNorris.canCountTo );  // Infinity

因此,基本上,freeze将在创建后将对象writableconfigurable标志设置为false。

不,Object.freeze的想法是你不能再改变它了。根据文档:

实质上,对象是不可变的。

:

不能向冻结对象的属性集添加或删除任何内容。任何这样做的尝试都将失败,