В качестве примера предположим, что переменная
<b>о</b>
может хранить объект или значение
<b>null</b>
. В этом случае можно явно проверить значение переменной о на неравенство значению null, как показано ниже:
<b>if (о !== null) ...</b>
Оператор «не равно»
<b>!==</b>
сравнит переменную о со значением
<b>null</b>
и вернет в результате
<b>true</b>
или
<b>false</b>
. Однако вы можете опустить оператор сравнения и положиться на тот факт, что
<b>null</b>
является ложным значением, а объект - истинным:
<b>if (о) ...</b>
В первом случае тело инструкции
<b>if</b>
будет выполнено, только если значение переменной о не равно
<b>null</b>
. Во втором - ставится менее жесткое условие: тело инструкции
<b>if</b>
будет выполнено, только если о не содержит
<b>false</b>
или другое ложное значение (такое как
<b>null</b>
или
<b>undefined</b>
). Какая инструкция
<b>if</b>
больше подходит для вашей программы, зависит от того, какие значения могут присваиваться переменной
<b>о</b>
. Если в программе необходимо отличать значение
<b>null</b>
от
<b>0</b>
и
<b>""</b>
, то следует использовать явную операцию сравнения.
Логические значения имеют метод
<b>toString()</b>
, который можно использовать для преобразования этих значений в строки «true» или «false», но они не имеют других полезных методов. Несмотря на простоту прикладного интерфейса, в языке имеется три важных логических оператора.
Оператор
<b>&&</b>
выполняет логическую операцию И. Он возвращает истинное значение, только если оба операнда истинны - в противном случае он возвращает ложное значение. Оператор
<b>||</b>
выполняет логическую операцию ИЛИ: он возвращает истинное значение, если хотя бы один (или оба) из операндов является истинным, и ложное значение - если оба операнда являются ложными. Наконец, унарный оператор
<b>!</b>
выполняет логическую операцию НЕ: он возвращает значение
<b>true</b>
для ложного операнда и
<b>false</b>
- для истинного. Например:
<b>if ((х == 0 && у == 0) И !(z == 0)) {</b>
<b>// х и у содержат значение 0 или z не равна нулю</b>
<b>}</b>
Полное описание этих операторов приводится в разделе 4.10.
3.4. Значения null и undefined
Ключевое слово
<b>null</b>
в языке JavaScript имеет специальное назначение и обычно используется для обозначения отсутствия значения. Оператор
<b>typeof</b>
для значения
<b>null</b>
возвращает строку «object», что говорит о том, что значение
<b>null</b>
является специальным «пустым» объектом. Однако на практике значение
<b>null</b>
обычно считается единственным членом собственного типа и может использоваться как признак отсутствия значения, такого как число, строка или объект. В большинстве других языков программирования имеются значения, аналогичные значению
<b>null</b>
в JavaScript: вам они могут быть известны как
<b>null</b>
или
<b>nil</b>
.
В языке JavaScript имеется еще одно значение, свидетельствующее об отсутствии значения. Значение
<b>undefined</b>
, указывающее на полное отсутствие какого-либо значения. Оно возвращается при обращении к переменной, которой никогда не присваивалось значение, а также к несуществующему свойству объекта или элементу массива. Кроме того, значение
<b>undefined</b>
возвращается функциями, не имеющими возвращаемого значения, и присваивается параметрам функций для аргументов, которые не были переданы при вызове. Идентификатор
<b>undefined</b>
является именем предопределенной глобальной переменной (а не ключевым словом, как
<b>null</b>
), которая инициализирована значением
<b>undefined</b>
. В ECMAScript 3
<b>undefined</b>
является переменной, доступной для чтения/записи, которой можно присвоить любое другое значение. Эта проблема была исправлена в ECMAScript 5, и в реализациях JavaScript, соответствующих этому стандарту, переменная
<b>undefined</b>
доступна только для чтения. Оператор
<b>typeof</b>
для значения
<b>undefined</b>
возвращает строку «undefined», показывающую, что данное значение является единственным членом специального типа.
Несмотря на эти отличия, оба значения,
<b>null</b>
и
<b>undefined</b>
, являются признаком отсутствия значения и часто являются взаимозаменяемыми. Оператор равенства
<b>==</b>
считает их равными. (Чтобы отличать их в программе, можно использовать оператор идентичности
<b>===</b>
.) Оба они являются ложными значениями - в логическом контексте они интерпретируются как значение
<b>false</b>
. Ни
<b>null</b>
, ни
<b>undefined</b>
не имеют каких-либо свойств или методов. На практике попытка использовать
<b>.</b>
или
<b>[]</b>
, чтобы обратиться к свойству или методу этих значений, вызывает ошибку ТуреЕrror.
Значение
<b>undefined</b>
можно рассматривать как признак неожиданного или ошибочного отсутствия какого-либо значения, a
<b>null</b>
- как признак обычного или вполне ожидаемого отсутствия значения. Если в программе потребуется присвоить одно из этих значений переменной или свойству или передать одно из этих значений функции, практически всегда предпочтительнее использовать значение
<b>null</b>
.