小编典典

冷冻和密封的区别

all

我刚刚听说了 JavaScript 方法freezeseal,它可以用来使任何对象不可变。

这是一个如何使用它的简短示例:

var o1 = {}, o2 = {};
Object.freeze(o2);

o1["a"] = "worked";
o2["a"] = "worked";

alert(o1["a"]);   //prints "worked"
alert(o2["a"]);   //prints "undefined"

freeze和 和有什么不一样seal?他们能提高性能吗?


阅读 66

收藏
2022-07-17

共1个答案

小编典典

Object.seal

  • 它可以防止从密封对象中添加和/或删除属性;使用delete将返回 false
  • 它使每个现有属性都不可配置:它们不能从“数据描述符”转换为“访问器描述符”(反之亦然),并且根本无法修改访问器描述符的属性(而数据描述符可以更改其writable属性,并且如果为真,则它们的value属性)。writeable
  • TypeError尝试修改密封对象本身的值时可能会抛出一个(最常见的是在 严格模式下

Object.freeze

  • 究竟是什么Object.seal,加上:
  • 它可以防止修改 任何 现有属性

两者都不会影响“深层”/孙子对象。例如,如果obj被冻结,obj.el则可以重新分配,但是obj.el可以修改,例如obj.el.id可以改变的值。


表现:

密封或冻结对象可能会影响其枚举速度,具体取决于浏览器:

  • Firefox:枚举性能不受影响
  • IE:枚举性能影响可以忽略不计
  • Chrome:密封或冷冻对象的枚举性能更快
  • Safari:密封或冷冻对象的枚举速度慢 92%(截至 2014 年)

测试:密封物体冷冻物体

2022-07-17