3

下面的评价是什么?

"1"+2+4

那这个呢:

5 + 4 + "3"

在第一种情况下,因为"1"是一个字符串,所以一切都是一个字符串,所以结果是"124". 在第二种情况下,它的93.what 发生在这里?为什么在一种情况下发生加法,而在另一种情况下发生字符串连接?

var x = "1" + 2 + 4;
var z = 5 + 4 + "3";
console.log(x); // "124"
console.log(z); // 93 

谁能解释一下?

4

5 回答 5

5

表达式从左到右计算。

"1"+2+3
 ^--^
"12" //string  +3
  ^_____________^
 "123"  //string

在第二种情况下

 1+2+"3"
 ^_^
  3+"3"
  ^___^
  "33" // string
于 2013-02-05T05:06:58.623 回答
1

考虑每次执行二进制操作时的操作顺序(rtl 或 ltr),它会相应地对其进行转换,因此 5+4 将是 int 并且 (5+4) + "3" 将是一个字符串,因为 "3" 是一个字符串

相同的方法适用于不同的示例

于 2013-02-05T05:05:28.343 回答
0

var x = "1" + 2 + 4; // 124

这是采用字符串“1”并将“2”和“4”作为字符串连接到它。

var z = 5 + 4 + "3"; // 93

这是将数字 4 和 5 相加得到数字 9,然后将字符串“3”连接到该数字以产生另一个字符串。

这里要带走的关键是您在这里所做的最终结果是字符串连接。计算数字的顺序不同,但最终结果是一个字符串。

于 2013-02-05T05:06:36.740 回答
0

在第一种情况下,您首先创建一个字符串 (1),然后 javascript 将以下数字连接为字符串 (124)。

在第二个中,您首先创建一个数字,然后 javascript 将第二个数字添加到第一个数字(5 + 4 = 9),然后添加一个字符串,以便将 9 和 3 连接起来

于 2013-02-05T05:08:56.100 回答
0

在这两种情况下都应用类型转换和从左到右的优先级。在第一个中,

var x = "1" + 2 + 4; // 124

编译器将 1 作为字符串,之后它将与 2 连接,现在 12 是字符串,因此它将与 4 连接,结果将产生“124”作为字符串。

var z = 5 + 4 + "3"; // 93

在第二个中,前 5 和 4 是数字,所以进行加法,结果将是 9。这将与字符串 3 连接,所以输出将是 93 作为字符串。

于 2013-02-05T05:26:47.710 回答