我的Javascript代码有一个奇怪的情况,我无法解释。到目前为止,只在Safari / Mac上观察过。
我有这样一句话:
'150.00'
有时会抛出错误:
尝试分配给只读属性。
此外:
dict[id].sliceHovered = true;
是一个空白对象,我使用dict
创建了自己。dict={}
由外部数据提供,因此它可以是任何内容(我还不知道哪个特定值会导致这种情况)。id
显然不是Javascript构建的名称
英寸sliceHovered
成员,但它不是Javascript定义的属性(如sliceHovered
中所示),只是一个常规属性(构造函数执行Object.defineProperty()
)。this.sliceHovered=false
已开启。"use strict"
,Object.freeze()
,Object.seal()
和Object.preventExtensions()
不会在整个代码库中的任何位置使用。因此,如何在这里抛出这样的错误是非常令人费解的。如果我有索引错误且const
为dict[id]
或undefined
,则错误会有所不同。我唯一的想法是,由于null
创建为dict
,因此它继承自dict={}
,并且可能Object
映射到某些继承的属性。但这意味着从id
返回的对象本身必须是只读的,因为dict[id]
绝对不是现有Javascript属性的名称。
但是我想不出任何像这样本质上只读的Javascript对象。
任何想法在这里可能出错?
答案 0 :(得分:0)
您可以查看这种情况
我唯一的想法是,因为dict是作为dict = {}创建的,所以它继承自Object
with:var dict = Object.create(null);
还尝试使用Object.getOwnPropertyDescriptor(dict, id)
来确保描述符具有正确的值。