JavaScript 中带有 + + 的意外字符串连接
Unexpected String Concatenation with + + in JavaScript
今天,我在使用 +
运算符时发现了 JavaScript 的意外行为:
"a" + "" //returns "a"
"a" + + "" //returns "a0"
为什么第二个表达式产生 "a0"
?
这与"a" + (+ "")
相同
+ ""
将空字符串转换为数字,并将 return 0
转换为空字符串。
同样+"22"
returns个数22
所以现在你有 "a" + 0
字符串与数字 return 字符串连接,最后得到 'a0'
在您的第二行中,这是使用 +
运算符对数字进行强制转换。
所以实际上 +""
将 "" 转换为数字 (->0),然后将结果连接到字符串 "a".
因此生成的字符串将是:"a0"。
+
符号用于多个运算符和操作:
a + b
其中 a
或 b
是一个字符串,执行连接。如果另一个值不是字符串,则将其转换为一个。
a + b
其中 a
和 b
是数字执行加法。
++a
或a++
执行递增(增加一)。
+ a
这是一元正运算符,它接受一个数字并且 returns 它不变。这有时被程序员用作将字符串转换为数字的快捷方式。
JavaScript 当这些操作之一遇到其他或混合数据类型时会自动转换类型。对象和数组往往会自动转换为字符串,连接优先于加法。这就是为什么 number + object
returns 是一个字符串,如果您希望 +
表示加法,一开始可能没有意义。
总之,解释器根据其上下文猜测操作。如果你写 "a" + + ""
,它会看到连续两个 +
运算符。由于它们不能都是二元运算符,它理解第二个 +
是一元 +
,它将字符串转换为数字。空字符串自动转换为 0
因为一元 +
只适用于数字,然后另一个 +
看到一个字符串和一个数字。既然有一个字符串,它将另一个操作数转换为一个字符串并执行连接。
除了是串联和加法运算符之外,+
运算符还是一元运算符(即对单个操作数进行运算的运算符)。当用作像 +value
这样的一元运算符时,JavaScript 将操作数的值强制转换(转换)为 Number 类型。例如:
+"4" // returns 4
+"42" // returns 42
+"Hello" // returns NaN (Not A Number), i.e. the String could not be converted into Number
+"" //returns 0; special case
因此,您的表达式 "a" + + ""
的计算方式类似于 "a"+0
(returns "a0"
)。
删除空格,它将不起作用并抛出错误。
今天,我在使用 +
运算符时发现了 JavaScript 的意外行为:
"a" + "" //returns "a"
"a" + + "" //returns "a0"
为什么第二个表达式产生 "a0"
?
这与"a" + (+ "")
+ ""
将空字符串转换为数字,并将 return 0
转换为空字符串。
同样+"22"
returns个数22
所以现在你有 "a" + 0
字符串与数字 return 字符串连接,最后得到 'a0'
在您的第二行中,这是使用 +
运算符对数字进行强制转换。
所以实际上 +""
将 "" 转换为数字 (->0),然后将结果连接到字符串 "a".
因此生成的字符串将是:"a0"。
+
符号用于多个运算符和操作:
a + b
其中a
或b
是一个字符串,执行连接。如果另一个值不是字符串,则将其转换为一个。a + b
其中a
和b
是数字执行加法。++a
或a++
执行递增(增加一)。+ a
这是一元正运算符,它接受一个数字并且 returns 它不变。这有时被程序员用作将字符串转换为数字的快捷方式。
JavaScript 当这些操作之一遇到其他或混合数据类型时会自动转换类型。对象和数组往往会自动转换为字符串,连接优先于加法。这就是为什么 number + object
returns 是一个字符串,如果您希望 +
表示加法,一开始可能没有意义。
总之,解释器根据其上下文猜测操作。如果你写 "a" + + ""
,它会看到连续两个 +
运算符。由于它们不能都是二元运算符,它理解第二个 +
是一元 +
,它将字符串转换为数字。空字符串自动转换为 0
因为一元 +
只适用于数字,然后另一个 +
看到一个字符串和一个数字。既然有一个字符串,它将另一个操作数转换为一个字符串并执行连接。
除了是串联和加法运算符之外,+
运算符还是一元运算符(即对单个操作数进行运算的运算符)。当用作像 +value
这样的一元运算符时,JavaScript 将操作数的值强制转换(转换)为 Number 类型。例如:
+"4" // returns 4
+"42" // returns 42
+"Hello" // returns NaN (Not A Number), i.e. the String could not be converted into Number
+"" //returns 0; special case
因此,您的表达式 "a" + + ""
的计算方式类似于 "a"+0
(returns "a0"
)。
删除空格,它将不起作用并抛出错误。