Я делал тест для удовольствия, когда заметил null+null
равен 0
в javascript. Есть ли причина для этого?Почему null + null = 0 в javascript
ответ
Оператор +
работает только с числами и строками. При представлении чего-то, что не является числом или строкой, оно принуждает. Правила - covered by the spec, но короткая версия состоит в том, что операнды - это coerced to primitives (что ничего не меняет в этом конкретном случае, примитив), а затем, если любая из них является строкой, другая принуждается к строке и выполняется конкатенация; если ни одна из них не является строкой, оба принуждаются к номерам и добавление.
Так null
получает coerced to a number, что 0, так что вы получите 0+0
что, конечно 0
.
Если кто интересно Дэвид Хаим-х null+[]
is "null"
observation, что происходит из-за того принуждение к примитивно вещам я говорил: Пустой массив []
принуждаются к примитивному. Когда вы принуждаете массив к примитиву, он заканчивает вызов toString()
, который вызывает join()
. [].join()
- ""
, потому что нет элементов. Так что это null+""
. Таким образом, null
привязано к строке вместо номера, давая нам "null"+""
, что, конечно, "null"
.
Операнды оператора '+' приведены к номерам, если они не являются строками – hindmost
@hindmost не всегда, но достаточно близко –
@hindmost null + [] на самом деле «null». Я бы сказал, что это довольно стандартизированный произвольный –