带有“+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 中如何工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章