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