为什么"typeof+''"返回'数字'
Why "typeof + ''" returns 'number'?
让我们尝试在控制台中键入以下代码:
typeof + ''
这将返回"number",而不带参数的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
不同,+
运算符调用的内部ToNumber
算法将空字符串(以及仅空白字符串)计算为编号0
。从ToNumber
规范向下滚动一点:
空的或仅包含空白的StringNumericLiteral将转换为
+0
。
下面是控制台上的快速检查:
>>> +''
<<< 0
>>> +' '
<<< 0
>>> +''t'r'n'
<<< 0
//parseInt with any of the strings above will return NaN
供参考:
- 一元加号和减号运算符的重要用途是什么?(所以)
- ES5#9.3.1适用于字符串类型的ToNumber(ES5规范)
- 运算符优先级(MDN)
计算结果为typeof(+'')
,而不是(typeof) + ('')
Javascript将以下+ ''
解释为0
,因此:
typeof + ''
将回显"数字"
为了回答第二个问题,typeof
需要一个参数,所以如果你自己调用它,它会抛出一个错误,就像你自己调用if
一样。
相关文章:
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 测试索引值是否等于某个数字的倍数
- 将数字转换为一定数量的硬币
- 铬:“;未捕获的语法错误:意外的标记:"
- 键入最后一位数字后自动提交
- 如何在javascript中迭代数字列表
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- Javascript逻辑运算符和字符串/数字
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 如何在javascript中获得与特定数字相等的随机数
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 如果元素's的ID以数字开头
- 递增一个数字而不去掉前导零
- javascript或css:如何隐藏后面跟着句点前缀的任何数字"1.文本”"2.文本“"
- 如何删除“"使用jQuery从十进制数字中提取
- "最大长度“;在输入类型=“0”的情况下不工作;数字“;在html文本框中
- 为什么javascript将typeof显示为"字符串“;当它是一个数字时
- 在输入3个数字后,自动插入“-"并将限制设置为9个字符
- 能够创建一个以字符串为键的映射,但当引用该键时;意外的数字错误"
- 为什么"typeof+''"返回'数字'