Согласно разделу 11.9.3 ES5, говорится что
Если Type(x) имеет логическое значение, вернуть результат сравнения ToNumber(x) == y.
Если Type(y) является логическим значением, вернуть результат сравнения x == ToNumber(y).
Когда я попытался сравнить
let a = null, b = null;
a == false; // false
b == false; // false
a == ""; // false
b == ""; // false
a == 0; // false
b == 0; // false
Что я ожидал здесь, для a == false
, возвращающего false, так это то, что false
приводится к Number, который равен 0
, поэтому сравнение становится a == 0
, а затем для следующего принуждения, который имеет тип null == 0
, null должен быть приведен к Number
, который равен 0
. Итак, наконец, он должен вернуть true для 0 == 0
.
Что я получил от ES5 11.9.3, так это
Если x равно null, а y не определено, вернуть true.
Если x не определено, а y равно null, вернуть true.
Упоминается о null и undefined.
В 10-м пункте раздела ES 11.9.3 говорится, что если ваше сравнение не соответствует 9 критериям выше return false
.
Возвращает ли мое сравнение false
согласно 10-му пункту в ES5 11.9.3, или я что-то здесь упускаю>
which is of type null == 0, null should get coerced to Number which is 0
. Ноnull
не имеет логического типа. - person Code Maniac   schedule 03.11.20190
, по крайней мере, насколько я мог видеть. Как вы упомянули, все точки не работают. PS: я не вижу причин использовать здесь ES5 (вы даже пометили его как ES6?!), так почему бы не спецификация ES2020? - person ASDFGerte   schedule 03.11.2019a == false
, так зачем показывать все остальные? - person T.J. Crowder   schedule 03.11.2019