如何在“Javascript”中使用“+ string”进行类型强制?

时间:2016-09-01 22:21:16

标签: javascript string types

我最近遇到过这个问题,“+ string”将字符串转换为数字(具体来说,使用字符串前面的加号运算符或类型强制的字符串变量),但无法找到文档或讨论满意我的兴趣。我得到的印象是它很懒或可能会产生意想不到的副作用,但我想更好地理解它。任何见解都表示赞赏。

2 个答案:

答案 0 :(得分:2)

正如ECMAScript spec中描述的section 12.5.6

  

12.5.6一元+操作员

     

注意 一元+运算符将其操作数转换为数字类型。

因此,在JavaScript中,一元+运算符(例如+x)将始终将表达式x转换为数字。换句话说,以下陈述是等效的:

var x = Number('1234');
var y = +'1234';

这也适用于任何变量,不仅仅是字符串或数字。如果您尝试转换的对象不是字符串或数字,则将调用该对象的toString()方法将对象转换为字符串,然后将其转换为数字。例如:

var obj = {
  toString: function() { return '9999'; }
};
var num = +obj; // = 9999

答案 1 :(得分:1)

一元加号运算符与一元减号相同。您可能熟悉这种语法:

const a = 1;
console.log(-a); // -> -1

a的值类型化为Number,然后将操作应用于结果值。这就是为什么如果您尝试将一元运算符应用于字符串,最终会得到NaN,例如

const a = 'abc';
console.log(-a); // -> NaN

虽然字符串"123"将成功输入数字123,但您会看到-123

const a = '123';
console.log(-a); // -> -123

+的工作方式相同,但不会否定价值。所以,如果你这样做

+123

该值将保持123。如果你这样做

+'abc'

值为NaN,就像-'abc'一样。但如果你这样做

+'123'

然后"123"(字符串)将被类型转换为123(数字),应用+(数字没有任何反应),并返回。因此,您最终会得到123(数字)。