Inicie su intérprete / consola y pruebe la comparación
> ",,," == Array(4)
True
¿Por qué? Al principio pensé que tal vez, dado que podrías pensar en ",,," como una matriz de cuatro caracteres con un segmento de terminación '\ 0', esa podría ser la razón, pero
> "..." == Array(4)
Devuelve "Falso". ¿Entonces por qué? Sé que es un poco idiosincrásico de tipeo de pato en Javascript, pero tengo curiosidad por saber qué subraya este comportamiento. Obtuve esto de la excelente presentación de Zed Shaw aquí por cierto .
javascript
ZenLikeThat
fuente
fuente
===
lugar de==
.Respuestas:
Porque el operando de la derecha se convierte en una cadena y la representación de la cadena
Array(4)
es,,,
:Si usa la función de constructor de matriz y pasa un número, establece la longitud de la matriz en ese número. Por lo tanto, puede decir que tiene cuatro índices vacíos (igual que
[,,,]
) y la representación de cadena predeterminada de las matrices es una lista separada por comas de sus elementos:El funcionamiento de la comparación se describe en la sección 11.9.3 de la especificación . Allí verá (
x == y
):(las matrices son objetos en JavaScript)
y si sigue el
ToPrimitive
método, eventualmente encontrará que llamatoString
.fuente
Array.join(",")
.Internamente va
fuente
Intente usar
===
. Cuando se usa==
en Javascript, intentará convertir las variables, lo que generará problemas como este. La consola está transmitiendoArray(4)
a la representación de cadena (es decirArray(4).toString
), que es",,,"
. La razón por la que las comas están ahí es que la.toString()
función las agrega a elementos separados en una matriz.Vea el fragmento a continuación:
fuente
Esto se debe a que
Array(4)
inicializa una matriz de 4 valores vacíos, y==
convierte implícitamente, por lo que:Son todos similares.
==
realiza conversiones de tipo implícitas antes de comparar los valores, lo que puede dar lugar a resultados impredecibles. Use===
para verificar el tipo y el valor.fuente
La comparación de una matriz con una cadena convierte la matriz en una cadena antes de realizar la comparación. Forzar una matriz vacía de 4 elementos a una cadena produce esa cadena exacta.
fuente
Primero pensé que era algo con el "prototipo" ... pero después de una pequeña investigación llegué a una triste conclusión ...
Aparentemente es una cosa js interna y más oscura sin mucha lógica ...
Sólo inténtalo
y sin coerción sobre tipos también ...
y obtendrás FALSO
lo sabes
null==null
,null===null
e inclusoundefined==undefined
yundefined===undefined
devuelve VERDADERO ... así que ... es un poco oscuro ...Array(4)==[,,,]
debería ser verdad tambiénfuente