为什么这个JavaScript有两种不同的解释方式?

为什么这个JavaScript有两种不同的解释方式?,javascript,Javascript,有人能解释一下为什么这个JavaScript有两种不同的解释方式吗 这: var testnum=$(“00000001”).text(); var test=“claimid:”++testnum; 警报(测试); 这将引发一个显示:claimid:1的警报 其中: var testnum = $("<div>00000001</div>").text(); var test = "claimid:" + testnum; alert(test); var test

有人能解释一下为什么这个JavaScript有两种不同的解释方式吗

这:

var testnum=$(“00000001”).text();
var test=“claimid:”++testnum;
警报(测试);
这将引发一个显示:claimid:1的警报

其中:

var testnum = $("<div>00000001</div>").text();
var test = "claimid:" + testnum;
alert(test);
var testnum=$(“00000001”).text();
var test=“claimid:”+testnum;
警报(测试);
这会引发一个警报,显示:claimid:0000000 1


我知道为什么第二个将testnum视为字符串,但为什么它将testnum视为第一个的数字。

您有两个加号。第二个加号是,在Javascript中,它的唯一目的是将其操作数转换为一个加号。

您有两个加号。第二个加号是,在Javascript中,它的唯一目的是将其操作数转换为

但是为什么它在第一次测试时把testnum当作一个数字呢

请记住,在JavaScript中,
+
可以用作一元运算符,将字符串转换为数字。这就是第二个加号:

var test = "claimid:" + + testnum;
//                      ^ HERE
在任何一种情况下,字符串串联的优先级都高于数字相加(如果适用),但第一种情况会将
00000001
的值转换为数字,这就是为什么会显示普通的旧
1

但是为什么它在第一次测试时把testnum当作一个数字呢

请记住,在JavaScript中,
+
可以用作一元运算符,将字符串转换为数字。这就是第二个加号:

var test = "claimid:" + + testnum;
//                      ^ HERE

在任何一种情况下,字符串串联的优先级都高于数字相加(如果适用),但第一种情况会将
00000001
的值转换为数字,这就是为什么会显示普通的旧
1

在第一种情况下,+被解释为一元正运算符。考虑<代码> x= -5 。-是一元负运算符+获取一个值并返回其数值。

在第一种情况下,+被解释为一元正运算符。考虑<代码> x= -5 。-是一元负运算符+获取一个值并返回其数值。

因为您添加了一个转换为数字的运算符。您会发现,当您使用运算符时,它们将执行操作。;-)因为您添加了一个转换为数字的运算符。您会发现,当您使用运算符时,它们将执行操作。;-)