Почему возвращает false без сравнения?

#javascript

#javascript

Вопрос:

 console.log([1,2,3] > null); // returns false

// "1,2,3" > null
// NaN > null
// false => Direct returns false ??
 

Код возвращает false . Обычно NaN> null должно быть числовым сравнением. Но результат вернул false . Почему?

Комментарии:

1. Что вы ожидали, что он вернет?

2. Я знаю, почему возвращает false . Но почему возвращает false без сравнения. Я спросил это.

3. Извините, но это не имеет особого смысла. Что значит «без сравнения»? Что вы ожидали, что произойдет вместо этого?

4. Помните, что все, что сравнивается NaN с любым способом, всегда возвращает false . Даже NaN === NaN сделает это.

Ответ №1:

Следуя инструкциям в алгоритме абстрактного реляционного сравнения:

  • [1,2,3] > null — Шаг 1 (a,b): примените ToPrimitive к обеим сторонам
  • "1,2,3" > null — Шаг 4 (d, e): примените ToNumeric к обеим сторонам

Теперь у нас есть NaN > 0 , то есть false , поскольку любое время NaN задействовано в любой реляционной операции, результат таков false .

В комментарии к заданному вами вопросу:

Но почему возвращает false без сравнения.

> это сравнение. Я думаю, вы имеете в виду «без операции ветвления или выражения» (например if , или условный оператор, ? : ). Если это так, то это потому, что выражения (включая реляционные выражения) имеют результирующие значения независимо от того, используете вы эти результаты для ветвления или нет. Результатом > выражения является true или false . Если вы используете это в an if , это нормально, но вам не обязательно:

 const a = 1 > 2;
console.log(a); // false