我已经recently learned表示,如果我尝试写入具有get
但没有set
的JavaScript属性,则会在“草率模式”中将其忽略,但在严格模式。
OTOH,如果我尝试从仅set
的属性中读取,则在两种模式下都将返回undefined
。在严格模式下为什么这也不是错误?
答案 0 :(得分:1)
这可能是因为通常的做法是通过测试来测试对象obj
的属性prop
是否具有值
if (obj.prop) { ...
或
if (obj.prop !== undefined) { ...
严格模式(如MDN所述)的目标之一是:
- 通过将它们更改为引发错误来消除一些JavaScript静默错误。
当程序员尝试设置不可设置的属性时,程序员的意图很明确,即他们想要设置属性。因此,引擎可以通过引发错误来警告您。
但是当您执行obj.prop
时,意图并不十分清楚。同样obj.kljasfbbsdbgjksb
(未定义的键)也是完全合法的。
程序员是在尝试获取的值,还是只是通过进行obj.prop
,typeof obj.prop
等来检查obj.prop === undefined
的性质。