Меньше (<)
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
Оператор меньше (<) возвращает true, если левый операнд меньше правого, и false в противном случае.
Попробуйте
console.log(5 < 3);
// Expected output: false
console.log(3 < 3);
// Expected output: false
// Compare bigint to number
console.log(3n < 5);
// Expected output: true
console.log("aa" < "ab");
// Expected output: true
Синтаксис
x < y
Описание
Операнды сравниваются с помощью нескольких раундов приведения типов, которое можно суммировать следующим образом:
- Сначала объекты преобразуются в примитивы путем вызова его
[Symbol.toPrimitive]()(с"number"в качестве подсказки),valueOf()иtoString()методов, в таком порядке. Левый операнд всегда приводится перед правым. Обратите внимание, что хотя[Symbol.toPrimitive]()вызывается с подсказкой"number"(что означает небольшое предпочтение объекту стать числом), возвращаемое значение не преобразуется в число, поскольку строки по-прежнему обрабатываются особым образом. - Если оба значения являются строками, они сравниваются как строки, на основе значений единиц кодов UTF-16 (не точек кодов Unicode), которые они содержат.
- В противном случае JavaScript пытается преобразовать нечисловые типы в числовые значения:
- Логические значения
trueиfalseпреобразуются в 1 и 0 соответственно. -
nullпреобразуется в 0. -
undefinedпреобразуется вNaN. - Строки преобразуются на основе содержащихся в них значений и преобразуются в
NaN, если они не содержат числовых значений.
- Логические значения
- Если одно из значений является
NaN, оператор возвращаетfalse. - В противном случае значения сравниваются как числовые значения. BigInt и числовые значения могут сравниваться вместе.
Другие операторы, включая >, >= и <=, используют тот же алгоритм, что и <. Есть два случая, когда все четыре оператора возвращают false:
- Если один из операндов преобразуется в BigInt, а другой преобразуется в строку, которую нельзя преобразовать в BigInt (она вызывает ошибку синтаксиса при передаче в
BigInt()). - Если один из операндов преобразуется в
NaN. (Например, строки, которые не могут быть преобразованы в числа, илиundefined.)
Во всех остальных случаях четыре оператора имеют следующие соотношения:
x < y === !(x >= y); x <= y === !(x > y); x > y === y < x; x >= y === y <= x;
Примечание: Одно заметное отличие между < и > — это порядок приведения типов, особенно если приведение к примитиву имеет побочные эффекты. Все операторы сравнения сначала приводят левый операнд, а затем правый.
Примеры
Сравнение строк
"a" < "b"; // true "a" < "a"; // false "a" < "3"; // false "\uD855\uDE51" < "\uFF3A"; // true
Сравнение строки и числа
"5" < 3; // false "3" < 3; // false "3" < 5; // true "hello" < 5; // false 5 < "hello"; // false "5" < 3n; // false "3" < 5n; // true
Сравнение чисел
5 < 3; // false 3 < 3; // false 3 < 5; // true
Сравнение числа и BigInt
5n < 3; // false 3 < 5n; // true
Сравнение Boolean, null, undefined, NaN
true < false; // false false < true; // true 0 < true; // true true < 1; // false null < 0; // false null < 1; // true undefined < 3; // false 3 < undefined; // false 3 < NaN; // false NaN < 3; // false
Сравнение с побочными эффектами
Сравнения всегда преобразуют свои операнды в примитивы. Это означает, что один и тот же объект может иметь разные значения в одном выражении сравнения. Например, у вас могут быть два значения, каждое из которых больше другого.
class Mystery {
static #coercionCount = -1;
valueOf() {
Mystery.#coercionCount++;
// The left operand is coerced first, so this will return 0
// Then it returns 1 for the right operand
return Mystery.#coercionCount % 2;
}
}
const l = new Mystery();
const r = new Mystery();
console.log(l < r && r < l);
// true
Предупреждение: Это может вызвать путаницу. Если ваши объекты предоставляют пользовательскую логику преобразования примитивов, убедитесь, что она является идемпотентной: множественные преобразования должны возвращать одно и то же значение.
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
less_than |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Less_than