在 JavaScript 的严格模式下,为什么只读一个集合 属性 不是错误?
In JavaScript's strict mode, why is reading a set-only property not an error?
我已经 get
但没有 set
的 JavaScript 属性,它会被忽略"sloppy mode",但在严格模式下是错误的。
OTOH,如果我尝试从 set
-only 属性 读取,这 returns undefined
在两种模式下。为什么这在严格模式下也不是错误?
这可能是因为通过
测试一个对象obj
的属性prop
是否有值是很常见的做法
if (obj.prop) { ...
或
if (obj.prop !== undefined) { ...
严格模式(如 MDN 所述)的目标之一是:
- Eliminates some JavaScript silent errors by changing them to throw errors.
当程序员试图设置一个不可设置的属性时,程序员的意图很明确,即他们想设置一个属性。所以引擎可以通过抛出错误来警告你。
但是当你这样做的时候obj.prop
,意图不是很明确。这样做 obj.kljasfbbsdbgjksb
(未定义的键)也是完全合法的。
程序员是在尝试获取值,还是只是通过typeof obj.prop
、obj.prop === undefined
等检查obj.prop
的性质.