operator - javascript array exist element
¿Por qué el operador "in" de javascript devuelve true cuando se prueba si 0 existe en una matriz que no contiene 0? (4)
El operador in
no hace lo que estás pensando que hace. El operador in
devuelve true
si el operando especificado es una propiedad del objeto. Para matrices, devuelve true
si el operando es un índice válido (lo cual tiene sentido si se piensa en matrices como un objeto de caso especial donde las propiedades simplemente se nombran 0, 1, 2, ...)
Por ejemplo, prueba esto:
javascript:var x=[1,4,6]; alert(2 in x);
También devolverá true
, porque "2" es un índice válido en la matriz. De la misma manera, "0" es un índice en la matriz, por lo que también devuelve true
.
¿Por qué el operador "in" en Javascript devuelve verdadero al probar si existe "0" en la matriz, incluso cuando la matriz no parece contener "0"?
Por ejemplo, esto devuelve verdadero y tiene sentido:
var x = [1,2];
1 in x; // true
Esto devuelve falso, y tiene sentido:
var x = [1,2];
3 in x; // false
Sin embargo, esto es cierto y no entiendo por qué:
var x = [1,2];
0 in x;
El operador de Javascript in
no verifica si un valor está contenido en una matriz. Comprueba si el objeto tiene una propiedad o un índice. Entonces var x = [4,5]; 4 in x; //false 1 in x; //true
var x = [4,5]; 4 in x; //false 1 in x; //true
var x = [4,5]; 4 in x; //false 1 in x; //true
.
Debido a que la longitud es una propiedad de x, "length" in x; //true
"length" in x; //true
Los navegadores modernos, excepto IE, admiten un par de métodos que pueden encontrar un valor en una matriz.
indexOf y lastIndexOf devuelven el primer (o último) índice de una coincidencia exacta de su argumento en una matriz, o -1, si no se encontró ningún elemento coincidente.
if(A.indexOf(0)!= -1){
// the array contains an element with the value 0.
}
Puede agregar uno o ambos métodos a IE y navegadores anteriores-
if(![].indexOf){
Array.prototype.indexOf= function(what, i){
i= i || 0;
var L= this.length;
while(i< L){
if(this[i]=== what) return i;
++i;
}
return -1;
}
Array.prototype.lastIndexOf= function(what, i){
var L= this.length;
i= i || L-1;
if(isNaN(i) || i>= L) i= L-1;
else if(i< 0) i += L;
while(i> -1){
if(this[i]=== what) return i;
--i;
}
return -1;
}
}
Se refiere al índice o clave, no al valor. 0
y 1
son los índices válidos para esa matriz. También hay claves válidas, incluidas "length"
y "toSource"
. Prueba 2 in x
. Eso será falso (ya que las matrices JavaScript están indexadas en 0).
Ver la documentación de MDN .