“*= 1”和“= +a”有什么区别?

5

什么是两者之间的区别?

a *= 1;

并且

a = +a;

在JavaScript中,如何将字符串转换为数字?

这两个方法都可以将一个string转换成一个number(整数或浮点数)。它们的行为与parseIntparseFloat不同。但是,这两行代码之间有什么区别吗?


当您将字符串乘以1时,它会将字符串转换为数字,当您在字符串前面添加+时也是如此,因此我需要知道转换的区别。 - Ismat Valiev
2
在这种情况下没有任何区别。我可以假设加法操作比乘法操作(按位)更快,但是当与1相乘时不应该有任何明显的影响... - Endless
4个回答

4

没有任何区别。它们都使用ToNumber转换成数字。数值乘以1和一元加操作可以保持值不变。


3
什么是“区别”?
a *= 1 

这是乘法赋值,你将a乘以1。
 a = +a

这是一个简单的赋值,使用一元加运算符。它会评估 a 并将其转换为数字。

一元加运算符和 parseInt 或 parseFloat 的主要区别在于,一元加可以将字符串表示的整数和浮点数以及非字符串值 true、false 和 null 转换,而 parseInt 和 parseFloat 只能分别将字符串转换为整数和浮点数。

另外,parseInt 方法允许您设置所使用的基数(进制 / 数字系统)。例如:

parseInt(a, 10); //decimal numeral system

3

没有区别,两者都尝试将值转换为数字,并分配乘法的值或一元加号+的结果。

通过从空字符串开始,如果是字符串化的数字或仅数字,则两个结果都返回NaN,在这两种情况下的结果都是一个数字。

var a, b;

a *= 1; 
b = +b;
console.log(a, b);

a = 'foo';
b = 'foo';

a *= 1; 
b = +b;
console.log(a, b);

a = '';
b = '';

a *= 1; 
b = +b;
console.log(a, b);

a = '7';
b = '7';

a *= 1; 
b = +b;
console.log(a, b);

a = 42;
b = 42;

a *= 1; 
b = +b;
console.log(a, b);


那么在这些情况下它们是相同的,现在“a *= 1”和“a = +a”之间有什么区别? - Kaiido
2
there is no difference. - Nina Scholz
1
返回空字符串将会得到 0。返回 undefined 将会得到 NaN - scraaappy

2

从技术角度来看没有区别。但是在这种情况下使用一元加运算符将字符串转换为数字可能更明显,使您的代码更易读。


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