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

发布于 2024-12-05 02:21:18 字数 98 浏览 0 评论 0原文

一旦我这样做:

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

有什么方法可以修改x吗? 谢谢。

Once I do this:

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

Is there any way to modify x?
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

星軌x 2024-12-12 02:21:18

不能向冻结的属性集中添加或删除任何内容
目的。任何这样做的尝试都会失败,无论是默默地还是通过抛出
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。

Nothing can be added to or removed from the properties set of a frozen
object. Any attempt to do so will fail, either silently or by throwing
a TypeError exception (most commonly, but not exclusively, when in
strict mode).

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

You can think about it like this:

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

So basically, freeze will set the objects writable and configurable flags to false after creation.

断爱 2024-12-12 02:21:18

不,Object.freeze 的想法是您无法再更改它。根据文档

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

和:

无法向冻结对象的属性集中添加或删除任何内容。任何这样做的尝试都会失败,...

No, the idea of Object.freeze is that you cannot change it anymore. According to the documentation:

In essence the object is made effectively immutable.

and:

Nothing can be added to or removed from the properties set of a frozen object. Any attempt to do so will fail, ...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文