让我们尝试在控制台中输入以下代码:
typeof + ''
返回'number',而typeof本身没有参数会引发错误。为什么呢?
答案 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
,它会抛出同样的错误。