2016-09-04 3 views
7

Я делал тест для удовольствия, когда заметил null+null равен 0 в javascript. Есть ли причина для этого?Почему null + null = 0 в javascript

+2

Операнды оператора '+' приведены к номерам, если они не являются строками – hindmost

+1

@hindmost не всегда, но достаточно близко –

+0

@hindmost null + [] на самом деле «null». Я бы сказал, что это довольно стандартизированный произвольный –

ответ

14

Оператор + работает только с числами и строками. При представлении чего-то, что не является числом или строкой, оно принуждает. Правила - 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".