5

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

typeof + ''

这将返回“数字”,而没有参数的 typeof 本身会引发错误。为什么?

4

3 回答 3

7

元加号运算符调用字符串的内部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+0ToNumber

为空或仅包含空格的StringNumericLiteral+0将转换为.

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

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

以供参考:

于 2013-02-22T23:24:41.687 回答
1

计算结果为typeof(+''),而不是(typeof) + ('')

于 2013-02-22T23:27:05.343 回答
1

Javascript 将以下内容解释+ ''0

typeof + ''将回显“数字”

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

于 2013-02-22T23:28:15.510 回答