Выбрать главу

При сравнении строк более надежные результаты позволяет получить метод 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: объект имеет свойство с именем "х"

"z" in point // => false: объект не имеет свойства с именем "z"

"toString” in point // => true: объект наследует метод toString

var data = [7,8,9]; // Массив с элементами 0, 1 и 2

"0" in data  // => true: массив содержит элемент "0"

1 in data    // => true: числа преобразуются в строки

3 in data     // => false: нет элемента 3

4.9.4. Оператор instanceof

Оператор instanceof требует, чтобы левым операндом был объект, а правым - имя класса объектов. Результатом оператора будет значение true, если объект, указанный слева, является экземпляром класса, указанного справа. В противном случае результатом будет false. В главе 9 рассказывается, что классы объектов в языке JavaScript определяются инициализировавшей их функцией-конструктором. Следовательно, правый операнд оператора instanceof должен быть именем функции-конструктора. Например:

var d = new Date(); // Создать новый объект с помощью конструктора Date()