2010-03-08 28 views

Respuesta

23

Porque "in" devuelve verdadero si la propiedad/índice especificado está disponible en el objeto. [1, 2] es una matriz y tiene un objeto en el índice 0. Por lo tanto, 0 en [1, 2] y 1 en [1, 2]. Pero! (2 en [1, 2]).

Editar: Para lo que probablemente haya querido, el siguiente comentario de David Dorward es muy útil. Si (algo perversamente) quiere quedarse con 'in', se puede usar un objeto literal

x = {1: true, 2: true}; 

Esto debería permitir 1 in x && 2 in x && !(0 in x) etc. Pero, en realidad, sólo tiene que utilizar indexOf.

+3

Además de esto, Félix está probablemente en busca de 'indexOf': https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/indexOf (que requiere JS 1.6, pero que incluye URI una implementación que puede incluir en su código para navegadores que todavía están en 1.5 o anterior) – Quentin

2

Probablemente estés buscando [1,2].indexOf(0). indexOf podría no funcionar en ie6 embargo.

Aquí es una aplicación que la fija:

if(!Array.indexOf) { 
    Array.prototype.indexOf = function(obj) { 
     for(var i=0; i<this.length; i++) { 
     if (this[i]==obj) { 
      return i; 
     } 
     } 
     return -1; 
    } 
} 
5

Debido a que hay un elemento -ésimo 0 en la matriz.

> 0 in [8,9] 
true 
> 1 in [8,9] 
true 
> 8 in [8,9] 
false 
Cuestiones relacionadas