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

Nir*_*Nir 13 javascript string int

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

一个例子:

console.log("1" + 2 + 3);
console.log(2 + 5 + "8");
Run Code Online (Sandbox Code Playgroud)

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

Ami*_*ich 21

  1. JavaScript执行自动类型转换
  2. 表达式从左到右进行评估,因此:

    "1" + 2 + 3 -> "12" + 3 -> "123"
    
    2 + 5 + "8" -> 7 + "8" -> "78"
    
    Run Code Online (Sandbox Code Playgroud)


Pav*_*ati 7

在您提到的情况下,JavaScript的类型转换推断您正在寻找转换所有参数的类型以使第一个参数的类型与+运算符匹配.

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

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