javascript - 为什么如果 ('k' 在 42);对于 42 中的 ('k' 抛出异常);不会,在 javascript 中?

标签 javascript ecmascript-5

从语言设计的 Angular 来看,为什么

if ('k' in 42);

抛出 TypeError 异常

for ('k' in 42);

不是吗?

我已阅读 ECMAScript 规范中的以下部分:

有人可以解释这种不一致的原因吗?

为什么 if (...) 中的表达式 'k' in 42 不能计算为 false

最佳答案

重新阅读 in 部分。

If Type(rval) is not Object, throw a TypeError exception.

42不是一个对象,它是一个数字

typeof 42 // 'number'
typeof new Number(42) // 'object'

for-in 语句不需要一个对象,实际上它实际上将它转换为一个对象

Let obj be ToObject(experValue).

我不认为这是这种行为背后的原因,它可能是一个设计缺陷(不一致)

关于javascript - 为什么如果 ('k' 在 42);对于 42 中的 ('k' 抛出异常);不会,在 javascript 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20702251/

相关文章:

javascript - ECMA 5 的 Object|Array.observe() 实现

javascript - Mootools类创建

javascript - 修改 PDO 返回的 JSON 对象

javascript - 如何在页面左侧添加背景色?

javascript - 从 NodeJS 中的 HTML 字符串中获取所有文本内容

javascript - 如何在窗口对象之外创建 JavaScript 对象?

javascript - 如何在 JavaScript 中以字符串形式返回参数?

javascript - 如何在javascript中的对象的开头添加属性

javascript - 当附加函数具有绑定(bind)时移除监听器

javascript - 访问 Angular2 JavaScript ES5 组件中的元素