Чем объясняется typeof a, где var a = 2 + [] - строка? - PullRequest
0 голосов
/ 07 июля 2019

Я смотрю на тип a, где var a = 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

1 Ответ

2 голосов
/ 07 июля 2019

+ с двумя операндами - это « оператор сложения », который может выполнять математическое сложение или сложение строк (конкатенацию) в зависимости от своих операндов.

Когда любой операнд равен + это объект, движок JavaScript преобразует объект в примитив.В вашем случае массив является объектом.Преобразование массива в примитив приводит к строке (как если бы вы вызвали их метод toString, который в основном выполняет .join("")).Тогда оператор + имеет дело с числом и строкой.Когда любой операнд является строкой, + преобразует другой операнд в строку, и в результате вы получаете "2" в качестве результата.То есть:

  • 2 + [] становится
  • 2 + "", что становится
  • "2" + "", что составляет
  • "2"

- с двумя операндами является « оператором вычитания », и он очень отличается.Это только для математики, оно не имеет никакого строкового значения.Это означает, что он преобразует свои аргументы в числа.Преобразование массива в число включает сначала преобразование его в строку, а затем преобразование строки в число.[] становится "", что преобразуется в 0.Итак:

  • 2 - [] становится
  • 2 - "", что становится
  • 2 - 0, что составляет
  • 2
...