#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