Ключевое слово null в JavaScript имеет особый смысл. Обычно считается, что у значения null объектный тип и оно говорит об отсутствии объекта. Значение null уникально и отличается от любых других. Если переменная равна null, то в ней не содержится допустимого объекта, массива, числа, строки или логического значения.
То есть это пустое значение. Если, например, числовая переменная содержит ноль, то она всё-таки содержит допустимое значение. С точки зрения обывателя ноль - это ничего. Но с точки зрения математики ноль - это точно такое же число, как и все остальные.
А вот если переменная содержит null, то это уже действительно ничего. Это означает, что переменная не содержит никакого допустимого значения, значит, не содержит ничего. Ну если уж докапываться к словам, то содержит особое значение null. Но понимать это стоит именно так - переменная пустая, ничего не содержит. И, тем не менее, с ней можно дальше работать.
Пример:
var x = 10;
var b = true;
var s = 'Hello';
alert(x + ', ' + b + ', ' + s);
Здесь мы создаём три переменные: числовую, логическую и строковую. Затем выводим их значения на экран. Вывод будет таким:
10, true, Hello
Если теперь всем этим переменным присвоить значения null:
x = null;
b = null;
s = null;
alert(x + ', ' + b + ', ' + s);
и снова вывести на экран, то вывод будет таким:
null, null, null
То есть теперь все эти переменные как бы пустые. Однако с ними можно дальше работать как ни в чём не бывало. Просто для чисел значение null в выражениях преобразуется в 0, для логических типов - в false, а для строк в строку 'null'. Например:
x = x + 1; //x = 1
b = b | true; //b = true
s = s + ' - строка'; //s = 'null - строка'
И всё это будет работать.
Также переменные, имеющие значение null, можно использовать в операциях сравнения:
b = null;
if (!b) alert('x = 0 (null)');
Главное помнить, чему соответствует значение null для разных типов (см. выше).
В С++ тоже есть NULL. Только пишется оно именно так, как я показал - большими буквами. Потому что это не значение, а макрос, который просто обнуляет переменную (именно обнуляет). И со строками (с типом string) в С++ это не работает.
И надо помнить, что в отличие от С++ и некоторых других языков, значение null в JavaScript - это не то же самое, что 0. В некоторых случаях оно может быть преобразовано в 0, однако эти два значение не эквивалентны. То есть:
var x = null;
if (x == 0) alert('x = 0');
вот этот пример ничего не выведет на экран, потому что null не равен 0. Хотя, как мы видели выше, если сложить null с каким-то числом, то оно будет преобразован в 0.
А вот в С++ такой же код выведет на экран сообщение:
int x = NULL;
if (x == 0) cout << "x = 0";
Потому что макрос NULL в С++ для числовых переменных возвращает обычное число 0, а не какое-то особое значение.
В Паскале есть нечто похожее - NIL. Похожее, но совсем не то. Это именно значение. И это именно пустое значение. Но его нельзя присвоить простым типам, таким как числа. Это значение обычно используется с указателями. Но это уже другая история.
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.