Eine interessante Frage:
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
Worum es hier eigentlich geht, ist das Wissen rund um den[]
运算符 和.
Bediener.
Anbei finden Sie die relevanten Regeln und die Website, Sie können sie selbst studieren:
MemberExpression: MemberExpression [Ausdruck]
BaseReference sei das Ergebnis der Auswertung von MemberExpression.
Basiswert sei GetValue(baseReference).
ReturnIfAbrupt(baseValue).
PropertyNameReference sei das Ergebnis der Auswertung von Expression.
PropertyNameValue sei GetValue(propertyNameReference).
ReturnIfAbrupt(propertyNameValue).
Sei bv RequireObjectCoercible(baseValue).
ReturnIfAbrupt(bv).
PropertyKey sei ToPropertyKey(propertyNameValue).
ReturnIfAbrupt(propertyKey).
Wenn es sich bei dem Code, der mit der ausgewerteten syntaktischen Produktion übereinstimmt, um Code im strengen Modus handelt, sei „strikt“ wahr, andernfalls sei „strikt“ falsch.
- ist
Gibt einen Wert vom Typ Reference zurück, dessen Basiswert bv ist, dessen referenzierter Name propertyKey ist und dessen striktes Referenzflag strict.
MemberExpression: MemberExpression IdentifierName
BaseReference sei das Ergebnis der Auswertung von MemberExpression.
Basiswert sei GetValue(baseReference).
ReturnIfAbrupt(baseValue).
Sei bv RequireObjectCoercible(baseValue).
ReturnIfAbrupt(bv).
EigenschaftNameString sei StringValue von IdentifierName
Wenn es sich bei dem Code, der mit der ausgewerteten syntaktischen Produktion übereinstimmt, um Code im strengen Modus handelt, sei „strikt“ wahr, andernfalls sei „strikt“ falsch.
- ist
Gibt einen Wert vom Typ Reference zurück, dessen Basiswert bv ist, dessen referenzierter Name propertyNameString ist und dessen striktes Referenzflag strict.
CallExpression: CallExpression [Ausdruck]
Wird auf genau die gleiche Weise ausgewertet wie MemberExpression: MemberExpression [Expression], außer dass der enthaltene CallExpression in Schritt 1 ausgewertet wird.
CallExpression: CallExpression
Wird auf genau die gleiche Weise ausgewertet wie MemberExpression : MemberExpression , außer dass der enthaltene CallExpression in Schritt 1 ausgewertet wird.
ECMAScript 2015 #sec-property-accessors
其实就是个 Object toString 的问题。