03. Логические значения

Логический тип данных имеет только два значения, которые представляются литералами true и false.

JavaScript — контекстно-зависимый язык. Например, оператор + означает сложение (или знак числа) в контексте чисел и конкатенацию в контексте строк. В контексте


25+"1" // Равно строке "251"

число 25 автоматически преобразуется в строку, а в контексте


"25"-1  //  Равно число 24

строка "25" преобразуется в число 25.

Логические значения в зависимости от контекста также легко преобразуются:


true   // равно 1 в контексте числа и "true" в контексте строки
false  // равно 0 в контексте числа и "false" в контексте строки 

Обратные преобразования:

Несколько примеров:


25+true    // Равно 26
"25"+true  // Равно "25true"
"25"-true  // Равно 24
1/false    // Равно Infinity
true-false // Равно 1

"false"    // Равно true в логическом контексте
[]         // Равно true в контексте логического выражения
[1,2]      // Равно true в контексте логического выражения
{}         // Равно true в контексте логического выражения
{x:1}      // Равно true в контексте логического выражения
if ({x:1}) y++;  // Переменная y будет увеличена на 1

25 || false // Равно 25, true в контексте логического выражения 
25 || "x"   // Равно 25, true в контексте логического выражения 
"false" || true  // Равно "false", true в контексте лог. выражения
"" || 25    // Равно 25,  true в контексте логического выражения 
0 || "1"    // Равно "1", true в контексте логического выражения 
0 || ""     // Равно "",  false в контексте логического выражения 
"" && 25    // Равно "",  false в контексте логического выражения 
25 && 7     // Равно 7,   true в контексте логического выражения 
25 && ""    // Равно "",  false в контексте логического выражения 

Последняя серия примеров связана с алгоритмами работы операторов || и &&.

Алгоритм вычисления выражения x || y

Пример 1


var x = 4;
var y = x-2 || x*x;  //  у равно 2 

Пример 2


var x = 2;
var y = x-2 || x*x;  //  у равно 4

Алгоритм вычисления выражения x && y

Пример 1


var x = 2;
var y = x-2 && x*x;  //  у равно 0 

Пример 2


var x = 4;
var y = x-2 && x*x;  //  у равно 16

Пример 3

Два следующих выражения дают эквивалентные результаты:


(a == b) && f();
if(a == b) f();

Обёртка Boolean не слишком интересна. Класс Boolean содержит только два метода: toString() и valueOf(). Первый преобразует логическое значение в строку, второй — преобразует объект в значение элементарного типа, то есть в true или false.

Можно записать:


true.toString(); // Равно строке "true"
true.valueOf();  // Равно логическому литералу true

Значения null и undefined

Значение null имеет в JavaScript специальный смысл: null есть объект (typeof null == "object") и в то же время это значение говорит об отсутствии объекта.

В числовом контексте null преобразуется в число 0:


25+null // Равно 25

В строковом — в строку "null":


"25"+null // Равно "25null"

В логическом — в false:


!null // Равно true

В JavaScript есть ещё одно интересное значение — undefined. Это значение возвращается при обращении к объявленной переменной, которой не присвоено значение или к свойству объекта, которого не существует.

Пример 1


var x;
alert(x)  // undefined

Пример 2


alert(x)  // Сообщение об ошибке ("определение x отсутствует")

Пример 3


var x = {}
alert(x.t)  // undefined

Видим, что значения null и undefined отличаются, но оператор эквивалентности считает их равными:


null == undefined // Равно true

Конечно, оператор тождественности их различает:


null === undefined // Равно false

В числовом контексте undefined преобразуется в число NaN, в строковом — в строку "undefined", в логическом — в false.

В разделе задания собраны контрольные вопросы (с ответами).