为什么“typeof +''”返回“数字”?

时间:2013-02-22 23:23:47

标签: javascript

让我们尝试在控制台中输入以下代码:

typeof + ''

返回'number',而typeof本身没有参数会引发错误。为什么呢?

3 个答案:

答案 0 :(得分:7)

unary plus operator调用字符串上的内部ToNumber算法。 +'' === 0

typeof + ''
// The `typeof` operator has the same operator precedence than the unary plus operator,
// but these are evaluated from right to left so your expression is interpreted as:
typeof (+ '')
// which evaluates to:
typeof 0
"number"

parseInt不同,ToNumber运算符调用的内部+算法会将空字符串(以及仅限空格的字符串)计算为数字0。从ToNumber spec

向下滚动一下
  

StringNumericLiteral 为空或仅包含空格会转换为+0

这是对控制台的快速检查:

>>> +''
<<< 0
>>> +' '
<<< 0
>>> +'\t\r\n'
<<< 0
//parseInt with any of the strings above will return NaN

供参考:

答案 1 :(得分:1)

评估结果为typeof(+''),而不是(typeof) + ('')

答案 2 :(得分:1)

Javascript将以下+ ''解释为0,所以:

typeof + ''将回显“数字”

要回答你的第二个问题,typeof会引用一个参数,所以如果你自己调用它,如果你自己调用if,它会抛出同样的错误。