为什么 'abc'.hasOwnProperty('length') == true

Why does 'abc'.hasOwnProperty('length') == true

请帮助我理解这种情况下的原型继承:

为什么 'abc'.hasOwnProperty('length') return 正确但 'length' in 'abc' 抛出错误?

表达式 'abc'.hasOwnProperty('length') 被 JavaScript 解释为

(new String('abc')).hasOwnProperty('length')

每个 (capital-S) 字符串实例都有自己的 length 属性,它给出了字符串的长度。

JavaScript (lower-case s) 字符串实例是原语,根本没有任何属性。使用字符串基元作为 . 运算符的 left-hand 端会导致字符串基元被隐式包装在 String 对象中(至少在概念上是这样;运行时实际上并不 必须实例化一个瞬态对象),这就是 .length 属性 的来源。

表达式 length in 'abc' 抛出异常,因为没有隐式提升 原语 'abc' 到带有 in 运算符的 String 实例.因此,由于基元不能具有 any 属性,并且这个概念没有意义,所以它是一个例外。