JavaScript中x = +x的作用

7

在查阅asm.js文档时,我发现了这个奇怪的片段(对于我来说至少是新的JS),它出现在所有示例代码中:

function test(x) {
    x = +x; // THIS
    ...
    return +(x*y);
}

第一行中的加号+有什么作用?

可能会将其更改为数字...! - Sudhir Bastakoti
3
typeof '3' => "字符串" typeof +'3' => "数字" - dfsq
2
return +(x*y); 中的 + 是多余的。 - Ian
@adrianp 嗯,这有点不同。在您的原始代码中,它是多余的原因是 * 强制它们执行计算,因此 () 的结果是 NaNNumber。在这个新例子中,只要 sqrt 的结果是一个 Number,那么它仍然是多余的。如果 sqrt 产生(或可以产生)一个 String,那么在这种情况下使用 + 进行转换是“必要的”。 - Ian
@adrianp 它执行数字转换。如果你想要一个整数转换,可以使用 |0 - John Dvorak
2个回答

6

它简单地用于将一个值与另一种类型转换为数字。此外,如果该符号后的值无法转换为数字,则会返回NaN。

FIDDLE

来自书籍Javascript和Jquery - 缺失手册

var numOfShoes = '2';
var numOfSocks = 4;
var totalItems = +numOfShoes + numOfSocks;

在变量前添加一个“+”符号(确保两者之间没有空格)告诉 JavaScript 解释器尝试将字符串转换为数字值 - 如果字符串只包含像“2”这样的数字,则最终得到的是已将字符串转换为数字。在此示例中,您最终得到6(2 + 4)。另一种技术是使用Number()命令,如下所示:
var numOfShoes = '2';
var numOfSocks = 4;
var totalItems = Number(numOfShoes) + numOfSocks;

Number()函数可以将字符串转换为数字(如果可能的话)。如果字符串只包含字母而不是数字,则会返回NaN值,表示无法将字母转换为数字。


3

是的,我错过了那个。有趣的是看到intdouble的强制转换是如何不同的。 - adrianp
5
不,它并没有明确将其转换为“double”。要做到这一点,需要使用parseFloat(用于“浮点数”)和parseInt(用于“整数”)。使用+将其转换为一个Number。因此,如果它看起来像是“int”,它将被转换为“int”。如果它看起来像是“float”,它将被转换为“double”。 - Ian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接