Marzo 10, 2021

== vs === Por que non todo é igual (e menos en javascript)

Se algunha vez o notaches, non todos os operadores iguais son iguais en JavaScript;). En particular, estou falando de == (dobre igual) e === (triplo igual). De feito, aínda que en aparencia fan cousas similares, en moitos casos compórtanse de forma completamente diferente. A boa xestión destes dous operadores é esencial para un bo desenvolvemento e non incorporar erros non desexados. Pero bo, imos ver que é todo isto!

dobre igual (==)

Cando no noso código queremos comparar dúas variables, podemos usar este operador para comprobar que aqueles dúas variables son iguais, pero … coidado! Porque se as dúas variables que queremos comparar son de diferentes tipos, o comportamento do noso código pode ser “raro”.

para entender un pouco mellor a explicación , fixa a miña publicación de dixitación dinámica.

Como vai saber (polo menos despois de ler a publicación de dixitación dinámica), Javascript é unha dixitación dinámica e que leva ao motor a aplicar a coerción para transformar unha variable dun tipo a outro .. Moitas veces esa transformación non é o que esperamos, podo ver moito ao usar o operador “==”.

Básicamente, o operador == O que fai é comparar 2 valores pero sen comprobar o tipo de variables.

dobre operador igual (==): comparar 2 valores pero o fai sen comprobar o tipo de variables

Con isto quero dicir o seguinte: Se por exemplo, teño unha variable que é numérica e vale 1 e teño unha variable de cadea que vale a pena ‘1’, cando se compara con este operador , a resposta dará a verdade:

var a = 1;var b = '1'if (a == b) { console.log('son iguales')} else { console.log('son diferentes')}

Esta impresión en pantalla “son iguais”, si, exactos, aínda que sexan diferentes tipos; Como JavaScript converte as dúas variables do mesmo tipo usando a coerción, estas dúas variables acaban sendo a mesma.

coerción: converter o valor dunha variable dun tipo a outro, para Exemplo de conversión do valor ‘1’ (tipo de cadea) a numérico, resultará no valor 1 (de tipo numérico)

pero o que acontece se comparamos o valor falso Co número cero?

var a = false;var b = 0;if (a == b) { console.log('son iguales')} else { console.log('son diferentes')}

Isto tamén se imprime na pantalla “son as mesmas”. E porque? Porque cando JavaScript converte 0 (cero) a Boolean, para o motor JavaScript, 0 (cero) faise falso, entón pregúntase se o falso é igual a falso e a condición devolve a verdadeira impresión en pantalla “son iguais”.

é un caso máis, mostrando o seguinte na pantalla?

Isto tamén imprime “son os mesmos ‘, aínda que 0 e a cadea baleira” son moi diferente, xa que, á variable “a” cuxo valor é unha cadea baleira, ao convertela a un valor numérico, é igual a 0 (cero).

e como fago cando quero Comparar tendo en conta tamén o tipo de variable?

Ti dotados!, Usando o mesmo operador triplo (===)

triple igual (===)

En contas de resumo, o triplo comproba o contido da variable e tamén comproba que as dúas variables sexan do mesmo tipo. É por iso que se di que é máis seguro que o == (dobre igual).

Triple operador igual (===): Comprobe o contido da vari E tamén, verifique que as dúas variables sexan do mesmo tipo.

Voltar ao exemplo anterior:

var a = 1;var b = '1';if (a === b) { console.log('son iguales')} else { console.log('son diferentes')}

Neste caso, como “A” e “B” non son do mesmo tipo, está impreso na consola “son diferentes”.

Co exemplo:

var a = false;var b = 0;if (a === b) { console.log('son iguales')} else { console.log('son diferentes')}

tamén se amosa na consola “son diferentes” xa que “un” do tipo booleano e “b” do tipo numérico son de tipo diferente.

por último :

var a = '';var b = 0;if (a === b) { console.log('son iguales')} else { console.log('son diferentes')}

Como pode supoñer, tamén se imprime na consola ‘son diferentes’.

Conclusión

Como podes ver, hai unha gran diferenza entre usar == e ===, de feito, o uso indebido pode levar a erros non desexados. Polo tanto, con dúbida, sempre usa === e aforrarás máis dunha dor de cabeza.

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *