在Javascript中减去两个字符串并进行类型强制

在Javascript中减去两个字符串并进行类型强制,javascript,Javascript,为什么Javascript对-operator执行类型强制而不是对+ str=“2” console.log(str+str) console.log(typeof(str+str)) console.log(str) log(typeof(str str)),因为唯一有意义的数据类型是number。+运算符对字符串和数字操作数有意义 在JavaScript中,一般情况下,像x+y这样的表达式必须推迟到运行时才能理解它的含义。这就是类型转换规则的用武之地。对于-,它知道操作数必须是数字,因此在

为什么Javascript对-operator执行类型强制而不是对+

str=“2”
console.log(str+str)
console.log(typeof(str+str))
console.log(str)

log(typeof(str str))
,因为唯一有意义的数据类型是number。
+
运算符对字符串和数字操作数有意义


在JavaScript中,一般情况下,像
x+y
这样的表达式必须推迟到运行时才能理解它的含义。这就是类型转换规则的用武之地。对于
-
,它知道操作数必须是数字,因此在运行时要做的工作更少。

因为
-
唯一有意义的数据类型是数字。
+
运算符对字符串和数字操作数有意义


在JavaScript中,一般情况下,像
x+y
这样的表达式必须推迟到运行时才能理解它的含义。这就是类型转换规则的用武之地。对于
-
,它知道操作数必须是数字,因此在运行时要做的工作更少。

只为数字减法定义
-
运算符
-
在字符串
+
的情况下只为数字减法定义运算符意味着串联。所有其他数学运算符的工作方式与普通数学运算符相同(因此字符串是强制类型)

let str='2'
console.log(str+str)
console.log(str-str)//2-2=0
console.log(str*str)//2*2=4

console.log(str/str)//2/2=1,如果字符串
+
表示连接。所有其他数学运算符的工作方式与普通数学运算符相同(因此字符串是强制类型)

let str='2'
console.log(str+str)
console.log(str-str)//2-2=0
console.log(str*str)//2*2=4

console.log(str/str)//2/2=1
上次对字符串进行减法、乘法或除法是什么时候?引擎如何知道“2”+“2”是4还是“22”?因为它无法猜测,所以它总是会被连接起来。其他的用于数字运算,因此它可以为您做出假设并清理代码。您最后一次对字符串进行减法、乘法或除法是什么时候?引擎如何知道“2”+“2”是4还是“22”?因为它无法猜测,所以它总是会被连接起来。其他的用于数值操作,因此它可以为您做出假设并清理代码。