为什么JavaScript使用字符串和int来评估加号?

时间:2015-07-15 07:25:18

标签: javascript string int

为什么JavaScript根据字符串的位置以不同的方式对字符串和整数求值?

一个例子:

console.log("1" + 2 + 3);
console.log(2 + 5 + "8");

第一行打印123,第二行打印78.

5 个答案:

答案 0 :(得分:21)

  1. JavaScript会automatic type conversion
  2. 表达式的评估为left to right,因此:

    "1" + 2 + 3 -> "12" + 3 -> "123"
    
    2 + 5 + "8" -> 7 + "8" -> "78"
    

答案 1 :(得分:7)

在您提及的情况下,JavaScript的类型转换推断您正在寻找将所有参数的类型转换为与+运算符的第一个参数的类型相匹配。

这就是为什么在第一种情况下你提到以字符串"1"开头的添加将其他参数转换为字符串。

在第二种情况下,您提到了console.log(2 + 5 + "8")+运算符的第一个参数是一个整数,这就是为什么JavaScript的类型转换假设您需要一个整数。

答案 2 :(得分:2)

嗯,那是因为+运算符过载了。

  • 当与两个整数一起使用时,它会将它们相加。
  • 当与两个字符串一起使用时,它会将它们连接起来。
  • 在字符串和整数之间使用时,它会将它们连接起来。

这就是为什么,当你这样做时

console.log("1" + 2 + 3);

它连接第一个和第二个操作数(因为第一个是一个字符串)给出一个字符串" 12",并且它再次将它与第三个操作数连接起来,原因相同。

然而,当你这样做时

console.log(2 + 5 + "8");

它将第一个和第二个操作数(都是数字)相加,得到7,最后将其与第三个操作数连接,原因如上所述。

答案 3 :(得分:0)

表达式从左到右进行评估。

因此,如果您使用"1" + 2 + 3并且操作数的类型不同,它将附加,否则如果类型是整数,则会添加。

case "1" + 2 + 3
"1" +2 - different types- result - "12" string
"12" + 3 - different types- result - "123" string
 case 2 + 5 + "8"
2 + 5 - same types- result - 7 int
7 + "8" - different types - result "78" string

答案 4 :(得分:0)

我认为它被称为鸭子铸造。如果它看起来像一只鸭子,像鸭子一样嘎嘎叫它一定是鸭子。如果它看起来像一个字符串" 1"那么它可能是一个字符串。

JavaScript似乎也从左到右,从特定(int)到一般(字符串)进行评估。

在你的第一个例子中,console.log(" 1" + 2 + 3),它正在评估" 1"因为引号而作为字符串,并假设您想要连接它后面的所有内容。它写了" 123"结果。

在第二个例子中,console.log(2 + 5 +" 8"),它接受一个int并添加到另一个产生7的int,然后遇到一个字符串,所以它假设你想做串联所以它写了" 78"作为一个字符串。如果你想要严格评估int值,你可以使用parseInt(" 8")将你的8转换回int。