Javascript中是否存在本质上只读的对象
Are there intrinsically read-only objects in Javascript?
我的Javascript代码中有一个奇怪的情况,我无法解释。到目前为止,它只在Safari/Mac上被观察到。
我有这样一行:
dict[id].sliceHovered = true;
有时会抛出一个错误:
尝试分配只读属性。
还有:
dict
是我自己用dict={}
创建的一个空白对象id
是由外部数据提供的,所以它可以是任何东西(我还不知道是哪个特定的值导致了这种情况)sliceHovered
显然不是Javascript构建的东西的名称中- dict中的对象属于我自己的类型。它们有一个
sliceHovered
成员,但它不是Javascript定义的属性(如Object.defineProperty()
),只是一个常规属性(构造函数执行this.sliceHovered=false
) "use strict"
打开Object.freeze()
、Object.seal()
、Object.preventExtensions()
和const
不在整个码库中的任何地方使用
因此,这样的错误怎么会出现在这里,真是令人费解。如果我有一个索引错误,并且dict[id]
将是undefined
或null
,则错误将不同。我唯一的想法是,由于dict
被创建为dict={}
,那么它从Object
继承,并且id
可能映射到一些继承的属性。但这意味着从dict[id]
返回的对象本身必须是只读的,因为sliceHovered
绝对不是现有Javascript属性的名称。
然而,我想不出有任何Javascript对象会像那样本质上是只读的。
有什么想法吗?
您可以检查这种情况
我唯一的想法是,由于dict被创建为dict={},那么它继承自Object
带有:var dict = Object.create(null);
还要尝试使用Object.getOwnPropertyDescriptor(dict, id)
来确保描述符具有正确的值。
相关文章:
- 如何使用jquery在填充自动完成的值后使文本框只读
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 是否可以在 JavaScript 对象文字表示法中创建只读成员
- 如何将具有只读成员的 javascript 对象复制到非只读成员
- 具有只读属性的Javascript对象
- 创建任何对象(包括深层属性)的只读/不可变副本
- 通过筛选TD对象类来设置只读列
- Javascript中是否存在本质上只读的对象
- 如何在特定对象的树视图中隐藏“创建”按钮.因为这个对象的所有字段都是只读的