让我们尝试在控制台中输入以下代码:
typeof + ''
这将返回“数字”,而没有参数的 typeof 本身会引发错误。为什么?
一元加号运算符调用字符串的内部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
的内部算法将空字符串(以及只有空格的字符串)评估为 Number 。从规范向下滚动一点:ToNumber
+
0
ToNumber
为空或仅包含空格的StringNumericLiteral
+0
将转换为.
这是控制台上的快速检查:
>>> +''
<<< 0
>>> +' '
<<< 0
>>> +'\t\r\n'
<<< 0
//parseInt with any of the strings above will return NaN
计算结果为typeof(+'')
,而不是(typeof) + ('')
Javascript 将以下内容解释+ ''
为0
:
typeof + ''
将回显“数字”
要回答你的第二个问题,typeof
需要一个参数,所以如果你自己调用它,如果你自己调用它会抛出同样的错误if
。