Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

• Любые другие комбинации значений не являются равными.

В качестве примера проверки на равенство рассмотрим сравнение:

"1" == true

Результат этого выражения равен

true
, т. е. эти по-разному выглядящие значения фактически равны. Логическое значение
true
преобразуется в число 1, и сравнение выполняется снова. Затем строка 1” преобразуется в число 1. Поскольку оба числа теперь совпадают, оператор сравнения возвращает
true
.

4.9.2. Операторы сравнения

Операторы сравнения определяют относительный порядок двух величин (числовых или строковых):

Меньше (<)

Оператор

<
возвращает
true
, если первый операнд меньше, чем второй операнд; в противном случае он возвращает
false
.

Больше (>)

Оператор

>
возвращает
true
, если его первый операнд больше, чем второй операнд; в противном случае он возвращает
false
.

Меньше или равно (<=)

Оператор

<=
возвращает
true
, если первый операнд меньше или равен второму операнду; в противном случае он возвращает
false
.

Больше или равно (>=)

Оператор

>=
возвращает
true
, если его первый операнд больше второго или равен ему; в противном случае он возвращает
false
.

Эти операторы позволяют сравнивать операнды любого типа. Однако сравнение может выполняться только для чисел и строк, поэтому операнды, не являющиеся числами или строками, преобразуются. Сравнение и преобразование выполняются следующим образом:

• Если какой-либо операнд является объектом, этот объект преобразуется в простое значение, как было описано в конце раздела 3.8.3: если метод

valueOf
объекта возвращает простое значение, используется это значение. В противном случае используется значение, возвращаемое методом
toString
.

• Если после преобразований объектов в простые значения оба операнда оказываются строками, они сравниваются как строки в соответствии с алфавитным порядком, где под «алфавитным порядком» понимается числовой порядок 16-битных значений кодовых пунктов Юникода, составляющих строки.

• Если после преобразований объектов в простые значения хотя бы один операнд не является строкой, оба операнда преобразуются в числа и сравниваются как числа. Значения 0 и -0 считаются равными. Значение

Infinity
считается больше любого другого числа, а значение
– Infinity
– меньше любого другого числа. Если какой-либо из операндов преобразуется в значение
NaN
, то оператор сравнения всегда возвращает false.

Не забывайте, что строки в JavaScript являются последовательностями 16-бит-ных целочисленных значений, и сравнение строк фактически сводится к числовому сравнению этих значений в строках. Порядок кодирования символов, определяемый стандартом Юникода, может не совпадать с традиционным алфавитным порядком, используемым в конкретных языках или регионах. Обратите внимание, что сравнение строк производится с учетом регистра символов и все прописные буквы в кодировке ASCII «меньше» соответствующих им строчных букв ASCII. Это правило может приводить к непонятным результатам. Например, согласно оператору < строка "Zoo” меньше строки "aardvark”.

При сравнении строк более надежные результаты позволяет получить метод

String.localeCompare,
который учитывает национальные определения «алфавитного порядка». Для сравнения без учета регистра необходимо сначала преобразовать строки в нижний или верхний регистр с помощью метода
String.toLowerCase
или
String.toUpperCase.

Оператор + и операторы сравнения по-разному обрабатывают числовые и строковые операнды. Оператор + отдает предпочтение строкам: если хотя бы один из операндов является строкой, он выполняет конкатенацию строк. Операторы сравнения отдают предпочтение числам и выполняют строковое сравнение, только когда оба операнда являются строками:

1+2 // Сложение. Результат: 3.

"1" + "2" // Конкатенация. Результат: "12".

"1" +2 // Конкатенация. 2 преобразуется в "2". Результат: "12".

11 < 3 // Числовое сравнение. Результат: false.

"11" < "3" // Строковое сравнение. Результат: true.

”11" < 3 // Числовое сравнение. "11" преобразуется в 11. Результат: false

"one" < 3 // Числовое сравнение, "one" преобразуется в NaN. Результат: false.

Наконец, обратите внимание, что операторы

<=
(меньше или равно) и
>=
(больше или равно) для определения «равенства» двух значений не используют операторы равенства или идентичности. Оператор «меньше или равно» определяется просто как «не больше», а оператор «больше или равно» - как «не меньше». Единственное исключение имеет место, когда один из операндов представляет собой значение
NaN
(или преобразуется в него). В этом случае все четыре оператора сравнения возвращают
false
.

4.9.3. Оператор in

Оператор

in
требует, чтобы левый операнд был строкой или мог быть преобразован в строку. Правым операндом должен быть объект. Результатом оператора будет значение
true
, если левое значение представляет собой имя свойства объекта, указанного справа. Например:

var point = { х:1, у:1 }; // Определить объект

"х" in point // => true: объект имеет свойство с именем "х"

Поделиться:
Популярные книги

Кодекс Охотника. Книга XXVII

Винокуров Юрий
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII

Иной. Том 5. Адская работа

Amazerak
5. Иной в голове
Фантастика:
боевая фантастика
городское фэнтези
технофэнтези
рпг
5.00
рейтинг книги
Иной. Том 5. Адская работа

Протокол "Наследник"

Лисина Александра
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Протокол Наследник

Кодекс Крови. Книга VI

Борзых М.
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VI

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Князь Целитель 5

Ткачев Андрей Юрьевич
5. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Князь Целитель 5

Приказано выжить!

Малыгин Владимир
1. Другая Русь
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.09
рейтинг книги
Приказано выжить!

Иной. Том 1. Школа на краю пустыни

Amazerak
1. Иной в голове
Фантастика:
боевая фантастика
рпг
аниме
5.75
рейтинг книги
Иной. Том 1. Школа на краю пустыни

Ученик. Книга 4

Первухин Андрей Евгеньевич
4. Ученик
Фантастика:
фэнтези
5.67
рейтинг книги
Ученик. Книга 4

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Третий. Том 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
попаданцы
5.00
рейтинг книги
Третий. Том 6

Воронцов. Перезагрузка. Книга 2

Тарасов Ник
2. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Воронцов. Перезагрузка. Книга 2

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара