Une question intéressante :
var a = new Object(); var b = new Object(); var c = new Object(); c[a] = a; c[b] = b; console.log(c[a] === a); //输出什么? ---> false console.log(c[b] === b); //输出什么? ---> true
var a = new Object(); var b = new Object(); var c = new Object(); c.a=a; c.b=b; console.log(c.a === a); //输出什么? ---> true console.log(c.b === b); //输出什么? ---> true
Ce qui est réellement en jeu ici, ce sont les connaissances liées à l'[]
运算符 和.
opérateur.
Ci-joint le règlement et le site internet pertinents, vous pouvez l'étudier vous-même :
MemberExpression : MemberExpression [Expression]
Que baseReference soit le résultat de l'évaluation de MemberExpression.
Laissez baseValue être GetValue(baseReference).
ReturnIfAbrupt(baseValue).
Laissez propertyNameReference être le résultat de l'évaluation de Expression.
Laissez propertyNameValue être GetValue(propertyNameReference).
ReturnIfAbrupt(propertyNameValue).
Soit bv RequireObjectCoercible(baseValue).
ReturnIfAbrupt(bv).
Laissez propertyKey être ToPropertyKey (propertyNameValue).
ReturnIfAbrupt (propertyKey).
Si le code correspondant à la production syntaxique en cours d'évaluation est un code en mode strict, laissez strict être vrai, sinon laissez strict être faux.
Renvoie une valeur de type Reference dont la valeur de base est bv et dont le nom référencé est propertyKey, et dont l'indicateur de référence strict est strict.
MemberExpression : MemberExpressionIdentifierName
Que baseReference soit le résultat de l'évaluation de MemberExpression.
Laissez baseValue être GetValue(baseReference).
ReturnIfAbrupt(baseValue).
Soit bv RequireObjectCoercible(baseValue).
ReturnIfAbrupt(bv).
Laissez propertyNameString être StringValue de IdentifierName
Si le code correspondant à la production syntaxique en cours d'évaluation est un code en mode strict, laissez strict être vrai, sinon laissez strict être faux.
Renvoie une valeur de type Reference dont la valeur de base est bv et dont le nom référencé est propertyNameString, et dont l'indicateur de référence strict est strict.
CallExpression : CallExpression [Expression]
Est évalué exactement de la même manière que MemberExpression : MemberExpression [ Expression ] sauf que l' CallExpression contenue est évaluée à l'étape 1.
CallExpression : CallExpression . Nom de l'identifiant
Est évalué exactement de la même manière que MemberExpression : MemberExpression IdentifierName sauf que l' CallExpression contenue est évaluée à l'étape 1.
ECMAScript 2015 #sec-property-accessors
En fait, il s’agit d’Object toString.