我正在查看其中的var a = 2 + []。我希望答案是数字2的类型,但是我得到的是字符串2的“ 2”。但是,当我评估var b = 2-[]时,我得到的值为类型2的值。有人可以帮助我了解这种行为。
const arr = [];
const a = 2 + arr;
console.log(a); // '2'
console.log(typeof a) // string
const b = 2 - arr;
console.log(b) // 2
console.log(typeof b); // number
//I expected the value a to be 2 of type
//number just as b
//If I toggle the boolean value of arr,
//both a and b evaluates to 2 of
//type number
最佳答案
具有两个操作数的+
是“ addition operator”,可以根据其操作数进行数学加法或字符串加法(串联)。
当+
的任何操作数是对象时,JavaScript引擎会将对象转换为基元。在您的情况下,数组是一个对象。将数组转换为基元会产生一个字符串(就像您调用了它们的toString
方法,基本上是.join("")
一样)。因此,+
运算符将处理一个数字和一个字符串。当任一操作数为字符串时,+
会将另一个操作数转换为字符串,因此您得到"2"
作为结果。那是:2 + []
变为2 + ""
变成"2" + ""
这是"2"
具有两个操作数的-
是“ subtraction operator”,并且非常不同。它仅用于数学,没有任何字符串含义。这意味着它将参数转换为数字。将数组转换为数字需要先将其转换为字符串,然后再将字符串转换为数字。 []
变为""
,转换为0
。所以:2 - []
变为2 - ""
变成2 - 0
这是2