意外的字符串与++;在JavaScript中
今天,我在使用意外的字符串与++;在JavaScript中,javascript,string,string-concatenation,Javascript,String,String Concatenation,今天,我在使用+操作符时发现JavaScript出现了一个意外行为: "a" + "" //returns "a" "a" + + "" //returns "a0" 为什么第二个表达式产生“a0”?这与“a”+(+) +”将空字符串强制转换为数字,并将为空字符串返回0。 类似地,+“22”返回数字22 现在你有了“a”+0 与数字连接的字符串返回字符串,并且在第二行中以'a0'结束,这是使用+运算符对数字的强制 所以实际上,+“正在将”转换为一个数字(->0),然后将结果连接到字符串“a”
+
操作符时发现JavaScript出现了一个意外行为:
"a" + "" //returns "a"
"a" + + "" //returns "a0"
为什么第二个表达式产生“a0”
?这与“a”+(+)
+”
将空字符串强制转换为数字,并将为空字符串返回0
。
类似地,+“22”
返回数字22
现在你有了“a”+0
与数字连接的字符串返回字符串,并且在第二行中以
'a0'
结束,这是使用+
运算符对数字的强制
所以实际上,+“
正在将”转换为一个数字(->0),然后将结果连接到字符串“a”
因此,结果字符串将是:“a0” 符号
+
用于多个运算符和操作:
其中a+b
或a
是执行串联的字符串。如果另一个值不是字符串,则将其转换为字符串b
其中a+b
和a
是数字相加b
或++a
执行递增(递增1)a++
是一元正运算符,它接受一个数字并返回不变的值。这有时被程序员用作将字符串转换为数字的快捷方式+a
number+object
返回一个字符串,如果您希望+
表示加法,那么一开始可能没有意义
总之,口译员根据上下文猜测操作。如果您编写
“a”++“
,它会在一行中看到两个+
运算符。因为它们不能都是二进制运算符,所以它知道第二个+
是一元+
,它将字符串转换为数字。空字符串会自动转换为0
,因为一元+
仅与数字一起工作,而另一个+
会看到一个字符串和一个数字。由于有一个字符串,它将另一个操作数转换为字符串并执行串联。除了作为串联和加法运算符外,+
运算符也是一元运算符(即对单个操作数进行操作的运算符)。当用作一元运算符(如+value
)时,JavaScript将操作数的值转换为数字类型。例如:
+"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
(返回“a0”
)
删除空白,它将不起作用并引发错误。在中,“a”+“
,+”
被视为+(“”)
,其计算结果为0
。简单地说,第一个+
用于concat运算符,第二个用作“
强制链接:P上的一元运算符(您并不孤单)