2017-07-26 5 views
0

Je tente une création d'index insulté en Javascript. C'est mon code.Créer un index de tableaux numériques personnalisés en Javascript

var map = []; 

function createIndexIfNotExists (posx,posy){    
if(typeof(map[posx]===undefined)){ 
      map[posx] = {}; 
      console.log("created: map["+posx+"] typeof="+typeof(map[posx])); //typeof object 
} 

if(typeof(map[posx][posy]===undefined)){ 
      map[posx][posy] = []; 
      console.log("created: map["+posx+"]["+posy+"] 
typeof="+typeof(map[posx])); //typeof object 
} 
map[posx][posy].push({'posx':posx, 'posy':posy }); } 

createIndexIfNotExists(10,5); 
createIndexIfNotExists(10,6); 

Mais le résultat est le suivant.

created: map[10] typeof=object 
created: map[10][5] typeof=object 
created: map[10] typeof=object 
created: map[10][6] typeof=object 

Pourquoi créer map[10] deux fois si typeof est object et non undefined?

Répondre

0

Sur cette ligne, vous devez déplacer le ()

if(typeof(map[posx]===undefined)){

devrait être:

if(typeof(map[posx])===undefined){

La même chose est vraie pour cette ligne:

if(typeof(map[posx][posy])===undefined){

Vous trouvez le type de la comparaison qui évaluera toujours à la chaîne 'boolean' qui évaluera à vrai.

0

typeof retour le tyoe sous forme de chaîne, de sorte que la vérification de type sera comme

if(typeof(map[posx])==="undefined") 

et

if(typeof(map[posx][posy])==="undefined") 

et aussi le ( et ) n'est pas nécessaire dans typeof pour envelopper l'élément vont vérifier, c'est un keyword, nit un function. lorsque vous encapsulez une expression (map[posx]===undefined dans votre cas) avec () dans typeof, cela signifiait que la préférence d'exécution de cette expression était plus élevée et que le type serait vérifié sur ce résultat. donc l'expression résolue map[posx]===undefined résolue en premier et vous vérifiez le type de la resule true ou false