如果两个对象加在一起等于 NaN (非数字),技术上属于数字,那么为什么要获取该类型将两个对象加在一起会产生“string”?
我将通过REPL表达这一点:
> {} + {}
> NaN
好。添加在一起的两个对象创建NaN
> typeof(NaN)
> "number"
好。我们知道NaN的类型是“数字”
> typeof({} + {})
> "string"
等待。这不应该是“数字”吗?
我知道javascript有一个不太需要的类型系统,但我对这里发生的事情感到困惑。由于某种原因,类型是从数字转换为字符串吗?数字甚至是转换类型转换的一部分吗?或者我只是使用typeof错误?
答案 0 :(得分:3)
{} + {}
是一个空块({}
),后跟从对象到数字(+{}
)的类型转换。它基本上读为
{} // empty block (a statement)
; // empty statement (just for clarity)
+{}; // expression statement (unary plus, object literal -> conversion to number)
但是,如果您使用typeof ({} + {})
,那么{} + {}
将被评估为表达式,在这种情况下,{}
只能是对象文字和{{1}是连接运算符。
您也可以使用分组运算符强制将构造计算为表达式:
+
另请参阅Why {} + {} is NaN only on the client side? Why not in Node.js?以及与[javascript] "{} + {}"
相关的其他问题。