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

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

Жанры

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: объект имеет свойство с именем "х"

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

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

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

Монстр из прошлого тысячелетия

Еслер Андрей
5. Соприкосновение миров
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Монстр из прошлого тысячелетия

Санек 3

Седой Василий
3. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 3

Разведчик. Заброшенный в 43-й

Корчевский Юрий Григорьевич
Героическая фантастика
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.93
рейтинг книги
Разведчик. Заброшенный в 43-й

Бояръ-Аниме. Газлайтер. Том 35

Володин Григорий Григорьевич
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35

Бастард

Осадчук Алексей Витальевич
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Бастард

Законы Рода. Том 14

Андрей Мельник
14. Граф Берестьев
Фантастика:
аниме
фэнтези
эпическая фантастика
5.00
рейтинг книги
Законы Рода. Том 14

Петля, Кадетский корпус. Книга третья

Алексеев Евгений Артемович
3. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский корпус. Книга третья

Мастер 6

Чащин Валерий
6. Мастер
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 6

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Гримуар темного лорда VI

Грехов Тимофей
6. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VI

Точка Бифуркации VII

Смит Дейлор
7. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации VII

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Наследие Маозари 2

Панежин Евгений
2. Наследие Маозари
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Наследие Маозари 2