我正在查看其中的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

09-27 00:20
查看更多