编程语言
首页 > 编程语言> > Javascript Object.seal()不会抛出异常

Javascript Object.seal()不会抛出异常

作者:互联网

我想模仿固定对象之类的东西,这样就不会有新成员添加到对象中. Object.seal(Obj)似乎是正确的方法,但是当我尝试创建新成员时它不会抛出异常.该成员不是创建的,但它是在沉默中发生的.

var O = { a: 111 }
Object.seal(O)
O.b = 222  <------ here the exception is expected (trying to add a member "b")
O.a = 333
console.log(O) // { a: 333 }

为什么有人想要这种沉默行为,为什么不抛出异常呢?

解决方法:

对密封对象的赋值行为随浏览器而变化.例如,最新版本的chrome就像你期望的那样.
出于实际目的,可以安全地假设在严格模式下将成员添加到密封对象时仅抛出异常.

;(function () {
    'use strict';
    var O = { a: 111 }
    Object.seal(O)
    O.b = 222
    O.a = 333
    console.log(O) // { a: 333 }
}());

正如您所料,这个自动调用的匿名函数会抛出错误.
不幸的是,在旧的浏览器上,你不能依赖于polyfills等
https://github.com/kriskowal/es5-shim

事实上,Object原型上的seal方法避免了“TypeError”异常,但在调用时无声地失败.
从文档:

This should be fine unless you are depending on the safety and
security provisions of this method, which you cannot possibly obtain
in legacy engines.

标签:javascript,ecmascript-5
来源: https://codeday.me/bug/20190825/1718215.html