var a = [0, 1, 2, 3];
a[[2]] === a[2]; // this is true
Sur le côté droit de l'équation, nous avons l'un[2], qui renvoie un nombre de type avec la valeur 2. Sur la gauche, nous sommes d'abord la création d'un nouveau tableau avec un seul objet de 2. Ensuite, nous faisons appel à un[(tableau est ici)]. Je ne suis pas sûr si elle correspond à une chaîne ou un nombre. 2, ou "2". Permet de prendre la chaîne de cas première. Je crois qu'un["2"] créer une nouvelle variable et renvoie null. null !== 2. Donc permet de supposer qu'il est en fait implicitement la conversion d'un nombre. [2] serait de retour 2. 2 et 2 correspondent au type (donc === travaux) et de la valeur. Je pense que c'est implicitement la conversion du tableau pour un certain nombre, car un[valeur] s'attend à une chaîne ou un nombre. Il ressemble à nombre prend la priorité.
Sur une note de côté, je me demande qui détermine que la préséance. C'est parce que [2] a un certain nombre, comme c'est le premier élément, de sorte qu'il convertit en un nombre? Ou est-ce que lors du passage d'un tableau en une[array] il tente de transformer le tableau en un nombre premier, alors la chaîne. Qui sait?
var a = { "abc" : 1 };
a[["abc"]] === a["abc"];
Dans cet exemple, vous créez un objet appelé un avec un membre appelé abc. Le côté droit de l'équation est assez simple; il est équivalent à un.abc. Cela renvoie 1. Le côté gauche d'abord crée un littéral de tableau ["abc"]. Ensuite, vous recherchez une variable sur un objet en passant dans le tableau nouvellement créé. Depuis cette attend une chaîne, il convertit le tableau en une chaîne de caractères. Cette évalue maintenant à un["abc"], qui est égal à 1. 1 et 1 sont du même type (c'est pourquoi === travaux) et de valeur équivalente.
[[[[[[[2]]]]]]] == 2;
C'est juste une conversion implicite. === ne fonctionne pas dans cette situation parce qu'il y est une incompatibilité de type.