【发布时间】:2017-03-03 09:12:40
【问题描述】:
当obj 发生突变时,为什么Object.freeze(obj) 会静默失败?
当不可变对象发生变异时,抛出比错误更合乎逻辑吗?然后,用户可以自行决定是否要将try catch 包裹在他的Object.freeze(obj) 周围。类似于我们需要用try catch 包装JSON.parse() 以避免出现空字符串或格式错误的JSON 的错误。
希望社区可以发表评论。
在几个答案和 cmets 后编辑:
据了解Object.frozen()在严格模式下会抛出错误。但是为什么非严格模式下该方法必须静默失败呢?
【问题讨论】:
-
取自 MDN " 任何这样做的尝试都会失败,无论是静默还是抛出 TypeError 异常(最常见,但不限于,在严格模式下)。"
-
MDN 链接:developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 您的问题与此链接的描述部分不同步
-
这个问题的目的是理解为什么当它是不可变的时它会默默地失败,如果可能的话,任何适用的用例。据了解,在严格模式下会抛出错误。
-
Object.freeze 只会冻结一个对象。也就是说,您不能更改冻结对象内的属性值。如果您尝试更改该值,那么它将静默失败。但是您的问题是“Object.freeze(obj) 失败”
标签: javascript json object ecma