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