2017-09-20 1 views
2
const items = ['one']; 
const obj = { 
    'one': 'foobar' 
}; 
console.log(obj[items]); 

La sortie de la console est "foobar".La matrice avec 1 élément est évaluée comme élément entre parenthèses

Pourquoi/comment [items] évalue-t-il à "un"? Cela va-t-il jeter une erreur en mode strict?

+1

Je sais que je l'ai vu des questions comme ça avant, mais peut » t en trouver un à marquer comme un doublon. – Barmar

+0

J'ai pensé qu'il aurait été demandé avant, mais puisque je ne pouvais pas trouver un non plus, j'ai décidé de demander – besseddrest

Répondre

4

Vous ne pouvez pas avoir une clé de type Array. Ainsi, votre tableau est converti en chaîne et premier code est équivalent à

const items = ['one']; 
const obj = { 
    'one': 'foobar' 
}; 
console.log(obj[items.toString()]); 

Fait intéressant, il ne fonctionnera que si vous essayez d'ajouter Symbol à votre tableau d'éléments.

En outre, en raison de la façon dont fonctionne Array.toString, vous pouvez avoir items avec plusieurs éléments, et toujours obtenir le même comportement:

const items = [1,2]; 

const obj = { 
    '1,2': 'foobar' 
} 

console.log(obj[items]); // also works 
+0

Ah, bonne explication, merci! – besseddrest

+0

@besseddrest heureux d'aider! Ne pas oublier d'accepter la réponse. Et acceptez la réponse aux questions que vous posez sur SO en général. – vittore