在JavaScript中,为什么:
new String * 1
<- 0
Run Code Online (Sandbox Code Playgroud)
究竟是什么让它回归0,为什么以下等于NaN?
function Foo() { this.bar = 0; }
new Foo * 5;
<- NaN
Run Code Online (Sandbox Code Playgroud)
Zom*_*mry 10
如果使用算术运算符*,JavaScript会尝试将类型转换为数字.一个空字符串变为0.
如果你有,例如:
new String("foo") * 1
Run Code Online (Sandbox Code Playgroud)
您将注意到它返回,NaN因为无法完成到数字的转换.这就是你的第二种情况.
使用算术运算符时,操作数将首先转换为数字.
在第一种情况下,在左侧表达式中,您有一个空字符串.转换为数字时,空字符串将变为0,如规范中的此部分所示.
StringNumericLiteral为空或仅包含空格将转换为+0.
因为new String它只是一个零字符的字符串对象,所以它是空的,这就是为什么你的第一个表达式被评估为零(0 * 1).
在第二种情况下,new Foo返回无法转换为数字的对象.如果某个对象无法转换为数字,NaN则会返回.引用规范中的相同部分,
如果语法不能将String解释为StringNumericLiteral的扩展,那么ToNumber的结果是NaN.
这就是为什么结果在NaN这里(NaN * 5).
你可以自己检查一下这些东西.
console.log(+(new String()));
// 0
console.log(+{});
// NaN
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |