在JavaScript的严格模式下,为什么读取set-only属性不是错误?

时间:2018-12-03 05:33:27

标签: javascript object properties getter-setter strict

我已经recently learned表示,如果我尝试写入具有get但没有set的JavaScript属性,则会在“草率模式”中将其忽略,但在严格模式。

OTOH,如果我尝试从仅set的属性中读取,则在两种模式下都将返回undefined。在严格模式下为什么这也不是错误?

1 个答案:

答案 0 :(得分:1)

这可能是因为通常的做法是通过测试来测试对象obj的属性prop是否具有值

if (obj.prop) { ...

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

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

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

当程序员尝试设置不可设置的属性时,程序员的意图很明确,即他们想要设置属性。因此,引擎可以通过引发错误来警告您。

但是当您执行obj.prop时,意图并不十分清楚。同样obj.kljasfbbsdbgjksb(未定义的键)也是完全合法的。

程序员是在尝试获取的值,还是只是通过进行obj.proptypeof obj.prop等来检查obj.prop === undefined的性质。