Javascript中是否存在本质上只读的对象?

时间:2016-07-26 12:12:51

标签: javascript safari

我的Javascript代码有一个奇怪的情况,我无法解释。到目前为止,只在Safari / Mac上观察过。

我有这样一句话:

'150.00'

有时会抛出错误:

  

尝试分配给只读属性。

此外:

  • dict[id].sliceHovered = true; 是一个空白对象,我使用dict创建了自己。
  • dict={}由外部数据提供,因此它可以是任何内容(我还不知道哪个特定值会导致这种情况)。
  • id显然不是Javascript构建的名称 英寸
  • dict中的对象属于我自己的类型。他们有一个sliceHovered成员,但它不是Javascript定义的属性(如sliceHovered中所示),只是一个常规属性(构造函数执行Object.defineProperty())。
  • this.sliceHovered=false已开启。
  • "use strict"Object.freeze()Object.seal()Object.preventExtensions()不会在整个代码库中的任何位置使用。

因此,如何在这里抛出这样的错误是非常令人费解的。如果我有索引错误且constdict[id]undefined,则错误会有所不同。我唯一的想法是,由于null创建为dict,因此它继承自dict={},并且可能Object映射到某些继承的属性。但这意味着从id返回的对象本身必须是只读的,因为dict[id]绝对不是现有Javascript属性的名称。

但是我想不出任何像这样本质上只读的Javascript对象。

任何想法在这里可能出错?

1 个答案:

答案 0 :(得分:0)

您可以查看这种情况

  

我唯一的想法是,因为dict是作为dict = {}创建的,所以它继承自Object

with:var dict = Object.create(null);

还尝试使用Object.getOwnPropertyDescriptor(dict, id)来确保描述符具有正确的值。