首页 > 解决方案 > 在 JavaScript 的严格模式下,为什么读取仅设置的属性不是错误?

问题描述

最近了解到,如果我尝试写入一个有get但没有的 JavaScript 属性set,它会在“草率模式”下被忽略,但在严格模式下会出错。

OTOH,如果我尝试从set-only 属性中读取,这undefined两种模式都会返回。有没有理由在严格模式下这也不是错误?

标签: javascriptobjectpropertiesgetter-setterstrict

解决方案


这可能是因为通常的做法是通过执行来测试 objectobj的属性prop是否具有值

if (obj.prop) { ...

或者

if (obj.prop !== undefined) { ...

严格模式的目标之一(如 MDN 所述)是:

  1. 通过更改它们以引发错误来消除一些 JavaScript 静默错误。

当程序员试图设置一个不可设置的属性时,程序员的意图很明确,即他们想要设置一个属性。所以引擎可以通过抛出错误来警告你。

但是当你这样做时obj.prop,意图不是很清楚。as doing obj.kljasfbbsdbgjksb(未定义的键)也是完全合法的。

程序员是在试图获取obj.prop价值,还是只是通过做typeof obj.prop、 ...obj.prop === undefined等来检查的性质?


推荐阅读