values operator index exist array javascript arrays in-operator

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 .