Si el operador de igualdad (estricto o no) devuelve true para undefined ...
console.log(undefined == undefined)... ¿por qué el operador mayor o igual que devuelve falso?
console.log(undefined >= undefined)La página de MDN dice que los operandos se comparan usando la Comparación relacional abstracta , pero eso se refiere a la parte mayor que (o menor que ). Por lo tanto, me parece que mayor o igual debería proporcionar el mismo algoritmo para la igualdad, ¿no es así?
Por lo tanto, me parece que mayor o igual debería proporcionar el mismo algoritmo para la igualdad, ¿no es así?
No, ese algoritmo no está involucrado aquí. La especificación define la evaluación de >= como
- Sea lref el resultado de evaluar RelationalExpression .
- ¿Que sea Ival ? ObtenerValor( lref ).
- Sea rref el resultado de evaluar ShiftExpression .
- Sea rval ? ObtenerValor( rref ).
- Sea r ? EsMenorQue( lval , rval ,
true).- Si r es
trueoundefined, devuelvefalse. De lo contrario, devuelvetrue.
Entonces, el único algoritmo involucrado es IsLessThan , que convertirá sus operandos en números si aún no son números (o cadenas).
undefined se convierte en NaN y Number::lessThan devuelve undefined si algún operando es NaN , lo que, según el paso 6 anterior, da como resultado false .