繁体   English   中英

为什么(42中的'k'); 为for(42中的'k')抛出异常; 不是,在JavaScript中?

[英]Why if('k' in 42); throw exception while for('k' in 42); does not, in javascript?

从语言设计的角度来看,为什么呢

if ('k' in 42);

抛出TypeError异常

for ('k' in 42);

才不是?

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

有人可以解释这种不一致的理由吗?

为什么不能'k' in 42中表达'k' in 42if (...)只评估为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).

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

我相信这里的关键是'operator'( in )和'statement'( for-in )之间的区别。 如果你检查标准,你会发现后者只有在错误地写入时才会抛出错误。 with case,在严格模式下抛出一个SyntaxError (!),非常有说服力。

显然你无法猜测是否错误地写入for (var x in someExpr)除非你先评估someExpr

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM