[英]JavaScript: Why []+(-~{}-~{}-~{}-~{})+(-~{}-~{}); returns “42”
[英]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 42
在if (...)
只评估为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.