在 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 所述)的目标之一是:

  1. Eliminates some JavaScript silent errors by changing them to throw errors.

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

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

程序员是在尝试获取值,还是只是通过typeof obj.propobj.prop === undefined等检查obj.prop的性质.