为什么这些js对象文字被冻结?
我遇到了一个问题,至少在 Firefox 和 Chrome 上,我创建的对象文字的属性被冻结。我包含了以下代码片段输出的屏幕截图,因为我很难相信这是真的。我一定是有什么原因导致了这个,或者我真的不懂 JavaScript。
let b = { foo: { bar: 2 }, baz: 9 };
console.log("b:", Object.isFrozen(b));
console.log("foo:", Object.isFrozen(b.foo));
console.log("foo.bar:", Object.isFrozen(b.foo.bar));
console.log("baz:", Object.isFrozen(b.foo.baz));
回答
并不是任何对象都被冻结了——它们不是。您所指的属性是基元,而不是对象。
原语是不可变的。为他们Object.isFrozen回报true。
正如规范所说:
如果 Type(O) 不是 Object,则返回 true。