javascript español - '\ n \ t \ r' == 0 es cierto?





definicion caracteristicas (5)


Como JavaScript es un lenguaje poco tipado, intenta escribir su primer lado de la comparación para que coincidan entre sí.

Cualquier cadena que no contenga un número, se convierte en 0 cuando se compara con un número entero, y se convierte en verdadera (excepto en ciertas situaciones), cuando se compara con un booleano.

Material de lectura ligera

Hoy, cuando estaba haciendo algunos experimentos con == , accidentalmente descubrí que "\n\t\r" == 0 . ¿Cómo diablos hace "\n\t\r" igual a 0 , o false ?

Lo que hice fue:

var txt = "\n";  //new line
txt == 0;        //it gives me true

Y eso realmente me molesta. Entonces hice más:

var txt = "\r";  //"return"
txt == 0;        //true

var txt = "\t";  //"tab"
txt == 0;        //true

No tiene sentido, en absoluto. ¿Cómo es eso? Y más loco es esto:

//Checking for variable declared or not

var txt ="\n\t\r";
if(txt!=false){
    console.log("Variable is declared.");
}else{
    console.log("Variable is not declared.");
}

Lo que me da es que la Variable is not declared.

¿Cómo es igual a 0 o false ?




La razón es que "\n\t\r" como " " se tratan como cadenas vacías. Si usa == , devolverá true pero si usa === , devolverá false .

Si quieres probar la existencia, debes usar algo como

if(typeof strName !== 'undefined') {
    /*do something with strName*/
} else {
    /*do something without it*/
}



txt no es un Boolean , por lo que nunca será false . Sin embargo, puede ser undefined .

var txt ="\n\t\r";
if(txt !== undefined) { //or just: if (txt)
    console.log("Variable is declared.");
} else {
    console.log("Variable is not declared.");
}
//=> will log: 'Variable is declared.'

Por cierto, una variable declarada puede estar undefined (por ejemplo, var txt; ).

Si haces una comparación más estricta (sin coerción de tipo, usando === ), verás que

var txt = '\n'; txt === 0; //=> false
var txt = '\r'; txt === 0; //=> false
var txt = '\t'; txt === 0; //=> false

Ver también




Siempre que use el == operator e intente comparar una cadena con un número, la cadena se convertirá primero en un número. Por lo tanto: alert("\n\r"==0) becomes: alert(Number("\n\r")==0) La constructure Number es algo interesante. En primer lugar, despojará el espacio en blanco y luego decidirá si el número no es un número o no. Si NaN , el resultado es " NaN ". Si la cadena está vacía, entonces el resultado es 0.

alert(Number()) alerts 0
alert(Number("")) alerts 0
alert(Number(" \n \r \n \t")) alerts 0
alert(Number("blah")) alerts NaN
alert(Number("0xFF")) alerts 255
alert(Number("1E6")) alerts 1000000

Para verificar si el resultado es NaN use isNaN ()

Thus: alert(isNaN("blah")) alerts true
Thus: alert(isNaN("")) alerts false
Thus: alert(isNaN("\n")) alerts false
Thus: alert(isNaN(" ")) alerts false

Sin embargo, tenga en cuenta que NaN nunca será igual a NaN:

var nan=Number("geh");alert(nan==nan);  alerts false 

Actualizar:

si quieres comprobar si ambos lados son NaN, entonces deberías convertir ambos a valores booleanos primero así:

var nan=Number("geh");alert(!!nan==!!nan); alerts true

o mejor aún

var nan=Number("geh");
alert(isNaN(nan)&& isNaN(nan));



Como lo señaló artur grzesiak en los comentarios, se limpió la interfaz de BehaviorSubject , y el captador ahora es solo .value .

Solo quería agregar esto como respuesta porque casi no leí los comentarios de la pregunta original y me hubiera perdido la respuesta correcta.





javascript