равенства (===) — это оператор «равно». Будьте осторожны, не путайте ===
с одиночным знаком равенства (=), поскольку === означает «равны ли эти
два числа?», а = означает «положить значение справа в переменную слева».
Иначе говоря, === задает вопрос, а = присваивает переменной значение.
2. Типы данных и переменные 45
При использовании = имя переменной должно стоять слева, а зна-
чение, которое вы хотите в эту переменную положить, справа. Однако
=== служит лишь для проверки двух значений на равенство, поэтому
неважно, какое значение с какой стороны стоит.
Чико,
Харпо
Представьте, что вы загадали своим друзьям Чико, Харпо и Граучо
и Граучо —
число, а именно число 5. Вы облегчили им задачу, сообщив, что это число
псевдонимы
от 1 до 9, и ваши друзья начали угадывать. Сначала присвоим перемен-
троих
ной mySecretNumber значение 5. Первый из играющих, Чико, загады-
из братьев
Маркс,
вает ответ 3, который мы кладем в переменную chicoGuess. Поглядим,
американских
что будет дальше:
звезд немой
комедии.
var mySecretNumber = 5;
My secret
var chicoGuess = 3;
number — мое
mySecretNumber === chicoGuess;
загаданное
false
число
var harpoGuess = 7;
Chico
guess —
mySecretNumber === harpoGuess;
догадка
false
Чико (Харпо,
var grouchoGuess = 5;
Граучо)
mySecretNumber === grouchoGuess;
true
Число, которое вы загадали, находится в переменной mySecretNumber.
Переменные chicoGuess, harpoGuess и grouchoGuess соответствуют
предположениям ваших друзей. Далее с помощью оператора === можно
проверить, равен ли какой-нибудь ответ вашему числу. Третий друг,
Граучо, назвал 5 и победил.
Сравнивая два числа с помощью ===, вы получаете true, только
когда оба числа совпадают. Поскольку в grouchoGuess находится значе-
ние 5, а mySecretNumber также равно 5, выражение mySecretNumber
=== grouchoGuess вернет true. Другие варианты ответа не совпадают
с mySecretNumber, поэтому сравнение с ними даст false.
Также с помощью === можно сравнить две строки или два буле-
вых значения. Если же сравнивать так значения разных типов, ответом
всегда будет false.
Двойной знак равенства
Еще немного запутаю вас: в JavaScript есть еще один оператор срав-
нения (двойное равно, ==), который означает «практически равно».
Используйте его для проверки двух значений на соответствие друг другу,
даже если одно из них строка, а другое — число. Все значения принадле-
жат к тому или иному типу, так что число 5 отличается от строки «5»,
хоть они и выглядят похоже. Если сравнить их с помощью ===, JavaScript
ответит, что значения не равны. Однако при сравнении через == они ока-
жутся равными:
46 Часть I. Основы
var stringNumber = "5";
String number —
здесь
var actualNumber = 5;
«строка-число»
stringNumber === actualNumber;
false
Actual number —
stringNumber == actualNumber;
число
true
Возможно, тут вы подумаете: «Похоже, двойное равно удобнее, чем
тройное!» Однако будьте очень осторожны: двойное равно может вве-
сти вас в заблуждение. Например, как считаете, 0 равен false? А строка
"false" значению false? При сравнении через двойное равно 0 оказы-
вается равным false, а строка "false" не равна false:
0 == false;
true
"false" == false;
false
Дело в том, что, сравнивая значения через двойное равно, JavaScript пер-
вым делом пытается преобразовать их к одному типу. В данном случае булево
значение он преобразует в числовое — при этом false становится нулем,
а true — единицей. Поэтому, сравнивая 0 == false, вы получите true!
Из-за всех этих странностей лучше пока пользуйтесь только опера-
тором ===.
ПОПР ОБУ ЙТЕ !
Вас попросили написать JavaScript-код для автоматической
системы управления кинотеатром. Задача состоит в том,
чтобы опре делить, пускать ли зрителя на фильм «с 12 лет
и старше» или нет.
Правила таковы: если посетителю 12 лет или больше,
он может проходить. Если ему еще не исполнилось 12, но его
сопровождает взрослый, пусть тоже проходит. Во всех
остальных случаях вход запрещен.
var age = 11;
var accompanied = true;
Accompanied —
???
в сопровождении
Допишите этот код, чтобы он определял, можно ли 11-летнему посетителю
посмотреть фильм (возраст задается в переменной age, а переменная
accompanied равна true, если посетитель пришел со взрослым).
Попробуйте поменять эти значения (например, пусть в age будет число 12,
а в accompanied — true) и убедитесь, что код по-прежнему находит
верное решение.
2. Типы данных и переменные 47
undefined и null
И наконец, в JavaScript есть два особых значения, они называются
undefi ned и null. Оба они означают «пусто», но смысл этого в обоих
случаях немного различается.
JavaScript использует значение undefi ned, когда не может найти иного
значения. Например, если, создав новую переменную, вы не присвоите ей
значение с помощью оператора =, ее значением будет undefi ned:
My variable —
var myVariable;
моя переменная
myVariable;
undefined
А значение null обычно используется, чтобы явно обозначить —
«тут пусто».
var myNullVariable = null;
My null variable —
myNullVariable;
моя пустая
null
переменная
Пока вы будете нечасто использовать undefi ned и null. Вы получите
undefi ned, если создадите переменную и не присвоите ей значения, —