Что происходит при тройном сравнении? (Javascript)

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

var x = 0;
if (1 < x < 3) {
  console.info("true");
} else {
  console.info("false");
}

Что происходит внутри этого оператора if, чтобы на выходе было «истина»? Происходит какое-то неявное логическое сравнение. А как мне узнать?

Он сравнивает результат 1 < x с 3

deceze 28.09.2018 14:35

Обратите внимание, что вы получите true при любом значении x. На самом деле это не проверка ничего полезного.

Scott Sauyet 28.09.2018 14:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
120
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сравнение происходит слева направо, поэтому 1 < x < 3 будет оценивать как

Сначала 1 < x, который представляет собой false, при условии, что x представляет собой 0. Вот следующее сравнение,

false < 3, который будет true, потому что будет неявное преобразование типа false в числовое представление, которым является 0. Итак, выражение оценивается как 0 < 3, то есть true.

Следовательно, когда вы выполняете true < 3 или false < 3, тогда это логическое значение будет неявно преобразовано в 0 как false и 1 как true.

Согласно Спецификация языка ECMAScript® 2018, (7.2.14) этот тип сравнения выполняется следующим образом:

7.2.14 Abstract Equality Comparison If Type(x) is the same as Type(y), then

Return the result of performing Strict Equality Comparison x === y.

If x is null and y is undefined, return true.

If x is undefined and y is null, return true.

If Type(x) is Number and Type(y) is String, return the result of the comparison x == ! ToNumber(y).

If Type(x) is String and Type(y) is Number, return the result of the comparison ! ToNumber(x) == y.

If Type(x) is Boolean, return the result of the comparison !ToNumber(x) == y.

If Type(y) is Boolean, return the result of the comparison x == ! ToNumber(y).

If Type(x) is either String, Number, or Symbol and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).

If Type(x) is Object and Type(y) is either String, Number, or Symbol, return the result of the comparison ToPrimitive(x) == y.

Return false.

А также:

7.1.3 ToNumber ( argument ): If argument is true, return 1. If argument is false, return +0.

(жирный мой)

Так:

(1 < 0 ) < 3
 false   < 3
   0     < 3
    true

Другие вопросы по теме