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. javascript - 关于js高级程序中的问题2. mysql - 要取出数据库中按某字段排序后的前10,20,30条数据要怎么做?3. python - 怎么进行服务器性能分析4. css - 如何让子元素不受父元素overflow的影响5. javascript - CSS图片轮播显示问题6. thinkPHP5中获取数据库数据后默认选中下拉框的值,传递到后台消失不见。有图有代码,希望有人帮忙7. windows-7 - win7下使用cmder,如何设置vim的tab为4个空格?8. python 多进程 或者 多线程下如何高效的同步数据?9. MySQL的SELECT...FOR UPDATE究竟起什么作用10. word-wrap该如何使用?

网公网安备