javascript - js对象 属性的访问和创建
问题描述
一个有意思的问题:
var a = new Object(); var b = new Object(); var c = new Object(); c[a] = a; c[b] = b; console.log(c[a] === a); //输出什么? ---> falseconsole.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); //输出什么? ---> trueconsole.log(c.b === b); //输出什么? ---> true
这里其实涉及到的就是[]运算符 和.运算符 相关知识。
附上相关规则和网址,你们自己研究吧:
MemberExpression : MemberExpression [ Expression ]
Let baseReference be the result of evaluating MemberExpression.
Let baseValue be GetValue(baseReference).
ReturnIfAbrupt(baseValue).
Let propertyNameReference be the result of evaluating Expression.
Let propertyNameValue be GetValue(propertyNameReference).
ReturnIfAbrupt(propertyNameValue).
Let bv be RequireObjectCoercible(baseValue).
ReturnIfAbrupt(bv).
Let propertyKey be ToPropertyKey(propertyNameValue).
ReturnIfAbrupt(propertyKey).
If the code matched by the syntactic production that is being evaluated is strict mode code, let strict be true, else let strict be false.
Return a value of type Reference whose base value is bv and whose referenced name is propertyKey, and whose strict reference flag is strict.
MemberExpression : MemberExpression . IdentifierName
Let baseReference be the result of evaluating MemberExpression.
Let baseValue be GetValue(baseReference).
ReturnIfAbrupt(baseValue).
Let bv be RequireObjectCoercible(baseValue).
ReturnIfAbrupt(bv).
Let propertyNameString be StringValue of IdentifierName
If the code matched by the syntactic production that is being evaluated is strict mode code, let strict be true, else let strict be false.
Return a value of type Reference whose base value is bv and whose referenced name is propertyNameString, and whose strict reference flag is strict.
CallExpression : CallExpression [ Expression ]
Is evaluated in exactly the same manner as MemberExpression : MemberExpression [ Expression ] except that the contained CallExpression is evaluated in step 1.
CallExpression : CallExpression . IdentifierName
Is evaluated in exactly the same manner as MemberExpression : MemberExpression . IdentifierName except that the contained CallExpression is evaluated in step 1.
ECMAScript 2015 #sec-property-accessors
问题解答
回答1:其实就是个 Object toString 的问题。
相关文章:
1. 如何解决docker宿主机无法访问容器中的服务?2. docker 下面创建的IMAGE 他们的 ID 一样?这个是怎么回事????3. javascript - 请指条明路,angular的$event,在select中却是undefined?4. 如何修改vim插件vimwiki中Vimwiki2HTML的一些细节5. javascript - JS事件委托问题6. javascript - 关于jquery的remove()方法7. JavaScript中怎么理解=、==和===8. java - Spring事务回滚问题9. javascript - vue.js如何递归渲染组件.10. mongodb - Mongo java驱动中,有没有封装好的函数,可以直接取到文档中的某个具体的值,而不是一个文档?或者有没有方法实现??
