В JavaScript почему +[1.5] считается числовым?

Я давно занимаюсь JavaScript, но только что заметил то, чего никогда раньше не видел. Рассматривать:

> +[1.5]
1.5

Почему это происходит? Это специальное правило, чтобы интерпретировать массивы как числовые или это случайная алхимия?

Обратите внимание, что:

> +[1,0]
NaN

Это имеет смысл для меня, конечно, но я бы ожидал, что +[1] также NaN, потому что, ну, это не число. Или это как-то классифицируется как число?

Тогда есть следующие случаи, которые заставляют меня поверить, что мы путешествуем через червоточину приведения типов (array ==> string, string ==> number):

> [2] + [4]
"24"
> + [2] + [4]
"24"
> (+[2]) + (+[4])
6
> +[2] + [4,5]
"24,5"
> // which, incidentally, looks like a european-formatted number, but I see
> // that that's just an accident (still another possibility for confusion)

Является ли что-нибудь из этого намеренным?

2 ответа

Решение

Онар + Оператор внутренне использует абстрактную операцию ToNumber.

Таким образом, унарный оператор, когда применяется к объекту, он применяется toString() (абстрактная операция ToPrimitive) сначала и затем применяет абстрактную операцию ToNumber, так что в основном + применительно к массиву одного числа он преобразует его в само число.

Если это применяется к [4,5] тогда toString вернется 4,5 который inturn при применении абстрактной операции ToNumber возвращает NaN.

// Trying to concatenate two string as [] coerce to strings = 24
[2] + [4]
// Converting 2 and 4 to number and then adding = 6   
(+[2]) + (+[4])
// Converting 2 to number and 4,5 will be coerced to string = 24,5
+[2] + [4,5]

Перед применением одинарного + для массива он преобразуется в строку, используя toString и затем попытайтесь преобразовать это в Число.

так

+[1.5]

вести себя как

+([1.5].toString())

следовательно

+[1,0]

преобразует [1,0] (массив, состоящий из двух элементов) в строку 1,5 а затем пытается преобразовать его в число

+[1,0] => +"1,0" => NaN

в этом примере:

+[2] + [4,5] => +"2" + "4,5" => 2 + "4,5" => "24,5"
Другие вопросы по тегам