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

标签 javascript prototype prototypal-inheritance

请帮助我理解这种情况下的原型(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/

相关文章:

javascript - 创建自定义 JS 方法的正确方法

Javascript 原型(prototype)继承?

javascript - 检查原型(prototype)的继承,而不是实例

javascript - 尝试要求未安装但不是必需的模块时发出警告

javascript - Protovis 与 D3.js

Javascript原型(prototype)继承和对象创建

javascript - 在Javascript中递归调用 "parent"构造函数?

javascript - 选中时用线为文本下划线

javascript - createAsyncThunk : abort previous request

javascript - Javascript 中的对象与原型(prototype)