请帮助我理解这种情况下的原型(prototype)继承:
为什么 'abc'.hasOwnProperty('length')
返回 true 但 'length' in 'abc'
抛出错误?
最佳答案
表达式 'abc'.hasOwnProperty('length')
被 JavaScript 解释为
(new String('abc')).hasOwnProperty('length')
每个(大写-S)字符串实例都有自己的 length
属性,它给出了字符串的长度。
JavaScript(小写 s)字符串实例是原语,根本没有任何属性。使用字符串基元作为 .
运算符的左侧会导致字符串基元隐式包装在 String 对象中(至少在概念上是这样;运行时真的 必须实例化一个 transient 对象),这就是 .length
属性的来源。
表达式 length in 'abc'
抛出异常,因为没有将 primitive 'abc'
隐式提升为 String 实例in
运算符。因此,由于基元不能有任何属性,而且这个概念没有意义,所以它是一个异常(exception)。
关于javascript - 为什么 'abc' .hasOwnProperty ('length' ) == true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48817753/