Spec-Zone.ru › JavaScript

Меньше (<)

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 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

Предупреждение: Это может вызвать путаницу. Если ваши объекты предоставляют пользовательскую логику преобразования примитивов, убедитесь, что она является идемпотентной: множественные преобразования должны возвращать одно и то же значение.

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-relational-operators

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API