Перейти к содержимому

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

Операторы сравнения в JavaScript необходимы для принятия решений в вашем коде путем сравнения значений. Это руководство предлагает глубокое погружение в операторы сравнения JavaScript, дополненное практическими примерами, четкими объяснениями и особым вниманием к некоторым необычным ситуациям, которые могут возникать при сравнении определенных типов данных.

Введение в операторы сравнения

Операторы сравнения сравнивают два значения и возвращают значение Boolean (true или false) в зависимости от того, является ли сравнение истинным. В JavaScript существует несколько ключевых операint операторов сравнения:

  • == (Нестрогое равенство)
  • === (Строгое равенство)
  • != (Нестрогое неравенство)
  • !== (Строгое неравенство)
  • > (Больше)
  • < (Меньше)
  • >= (Больше или равно)
  • <= (Меньше или равно)

Каждый оператор выполняет определенную роль, и понимание различий между ними крайне важно для точного программирования.

Нестрогое против строгого сравнения

Нестрогое равенство (==)


Output appears here after Run.

Объяснение: Здесь 1 и "1" кажутся разными (одно является числом, а другое — строкой), но == приводит оба значения к одному типу перед сравнением. Именно поэтому они считаются равными.

Строгое равенство (===)


Output appears here after Run.

Объяснение: На этот раз 1 и "1" не считаются равными, потому что === проверяет, совпадают ли значение и тип. В данном случае типы не совпадают.

Операторы неравенства

Нестрогое неравенство (!=)


Output appears here after Run.

Объяснение: 1 и "2" различны. != также приводит типы к сравнению, но так как значения после преобразования типов различаются, результат — true.

Строгое неравенство (!==)


Output appears here after Run.

Объяснение: Здесь !== находит значения разными, так как проверяет их без изменения типа. Поскольку типы (число против строки) различаются, результат — true.

Операторы отношений


Output appears here after Run.

Объяснение: Эти примеры демонстрируют базовые сравнения:

  • x < y — true, так как 5 меньше 10.
  • x > y — false, так как 5 не больше 10.
  • x <= 5 — true, так как 5 равно 5.
  • y >= 11 — false, так как 10 не больше или равно 11.

Примечание по сравнению строк: При использовании < и > со строками JavaScript сравнивает их лексикографически (по значению Unicode). Например, 'b' > 'a' — это true, но '10' < '2' также true, так как сравнение происходит посимвольно.

Практическое применение операторов сравнения

Функции сортировки


Output appears here after Run.

Объяснение: Этот код сортирует числа в порядке возрастания. Функция sort сравнивает каждую пару чисел, расставляя их от меньшего к большему.

Условная логика


Output appears here after Run.

Объяснение: Этот код проверяет, является ли age 18 или более. Если да, выводится "You are an adult." Если нет, выводится "You are not an adult."

Странное поведение JavaScript

JavaScript иногда демонстрирует странное поведение при сравнении необычных типов данных:


Output appears here after Run.

Объяснение:

  • [] == 0: Пустой массив считается равным нулю, потому что при преобразовании массива в число он становится 0.
  • [] == ![]: Это кажется очень странным, но вот что происходит: ![] преобразует массив в логическое значение (которое является true, так как массивы являются truthy), а затем инвертирует его в false. При сравнении [] с false оба значения преобразуются в числа (0 и 0), следовательно, они "равны".

Давайте рассмотрим больше примеров необычного поведения JavaScript при сравнениях и других операциях.

Сравнение массивов и объектов

Проверки нестрогого равенства в JavaScript могут давать неожиданные результаты при сравнении массивов и объектов из-за того, как эти структуры данных преобразуются и сравниваются.


Output appears here after Run.

Объяснение:

  • [] == [] и {} == {}: Хотя обе стороны сравнения кажутся идентичными, это разные экземпляры в памяти. JavaScript проверяет равенство объектов и массивов на основе их адреса в памяти, а не их содержимого.
  • [] == ![]: Этот случай следует тем же правильным приведения типов, которые были объяснены в предыдущем разделе.

Null против Undefined

Сравнение null и undefined с использованием нестрогого равенства также демонстрирует необычное поведение, но у них есть некоторые сходства в JavaScript.


Output appears here after Run.

Объяснение:

  • null == undefined: JavaScript рассматривает null и undefined как нестрого равные, что является исключением в правилах нестрогого равенства.
  • null === undefined: Поскольку это разные типы, строгое равенство возвращает false.
  • null == 0, null > 0 и null >= 0: В реляционных сравнениях null приводится к 0, поэтому null >= 0 превращается в 0 >= 0, что дает true. Однако null == 0 и null > 0 остаются false, так как null приводится к 0 только в контексте отношений, а не в нестрогом равенстве.

Сравнение логических и нелогических значений

Сравнение логических значений (boolean) с нелогическими с использованием нестрогого равенства может привести к контринтуитивным результатам из-за приведения типов к числам.


Output appears here after Run.

Объяснение:

  • true == 1 и false == 0: В JavaScript true преобразуется в 1, а false в int 0, поэтому эти сравнения возвращают true.
  • true == 2: Поскольку true преобразуется в 1, оно не равно 2.
  • true == "1" и false == "0": Строки преобразуются в числа, что соответствует числам, в которые преобразуются true и false.

Использование Object.is для сравнений

Для тех, кому требуются точные сравнения, особенно в таких пограничных случаях, как NaN и +0 против -0, JavaScript предоставляет Object.is.


Output appears here after Run.

Объяснение:

  • Object.is(NaN, NaN): В отличие от операторов равенства, Object.is правильно идентифицирует два значения NaN как одинаковые.
  • Object.is(+0, -0): Object.is различает положительный и отрицательный ноль, чего не делают операторы равенства.
  • Object.is(false, false): Демонстрирует точное равенство без приведения типов, возвращая true для идентичных примитивных значений.

Понимание этих странных особенностей JavaScript не только помогает избегать потенциальных ловушек, но и повышает способность эффективно отлаживать сложные проблемы.

Эти примеры иллюстрируют, почему часто безопаснее использовать операторы строгого сравнения (=== и !==), которые не преобразуют типы автоматически. Это помогает избежать неожиданных результатов в вашем ко

WARNING

Используйте операторы строгого сравнения (=== и !==) в JavaScript, чтобы обеспечить точность типа и значения. Это предотвращает непреднамеренное приведение типов, делая ваши сравнения более предсказуемыми и надежными. Например, 0 === '0' дает false, что подчеркивает важность совпадения типов.

Лучшие практики

  • Предпочитайте строгие операторы: Используйте === и !==, чтобы избежать ошибок из-за автоматического преобразования типов.
  • Четкие условия: Делайте свои условия понятными и простыми, особенно когда они включают сравнения.
  • Проверяйте граничные случаи: Всегда проверяйте граничные случаи в ваших сравнениях, особенно при работе с пользовательским вводом или переменными типами данных.

Заключение

Понимание операторов сравнения в JavaScript крайне важно для принятия правильных решений в ваших программах. Следуя этим рекомендациям и понимая как типичное, так и нетипичное поведение, вы сможете писать более надежный и предсказуемый код. Продолжая изучать JavaScript, используйте эти операторы осмотрительно для эффективного решения различных задач программирования.

Практика

Какие из следующих операторов сравнения можно использовать в JavaScript?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.