带有“+string”的类型强制在 Javascript 中如何工作? [复制]

Posted

技术标签:

【中文标题】带有“+string”的类型强制在 Javascript 中如何工作? [复制]【英文标题】:How does type coercion with "+string" work in Javascript? [duplicate] 【发布时间】:2017-01-09 22:34:47 【问题描述】:

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

【问题讨论】:

您能否提供一个示例,说明它是如何使用的? 不是用于连接,而是用于类型强制。 developer.mozilla.org/en/docs/Web/javascript/Reference/… 再次,不询问算术运算符。询问类型强制。 【参考方案1】:

正如ECMAScript spec 在section 12.5.6 中描述的那样:

12.5.6 一元 + 运算符

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

所以在 JavaScript 中,一元 + 运算符(例如,+<em>x</em>)将始终将表达式 x 转换为数字。换句话说,以下语句是等价的:

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

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

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

【讨论】:

对,我很想知道它是如何工作的。 嗯,我想说这就是它在底层的工作原理,它只是调用 Number 构造函数(或至少是其内部等效项)并将参数转换为数字。跨度> 【参考方案2】:

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

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(数字)。

【讨论】:

以上是关于带有“+string”的类型强制在 Javascript 中如何工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java中的强制类型转换

未经检查的强制转换:尝试在同一方法中将 Int 或 String 强制转换为 T(泛型类型)

string强制转换为int

JS基础_强制类型转换-String

在 C++ 中覆盖强制转换运算符

强制类型转换之String类型