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. angular.js - 如何通俗易懂的解釋“依賴注入”?2. django - 后臺返回的json數據經過Base64加密,獲取時用python如何解密~!3. 我的html頁面一提交,網頁便顯示出了我的php代碼,求問是什么原因?4. 我在centos容器里安裝docker,也就是在容器里安裝容器,報錯了?5. css3 - 請問一下在移動端CSS布局布局中通常需要用到哪些元素,屬性?6. 老哥們求助啊7. javascript - vue-router怎么不能實現跳轉呢8. tp6表單令牌9. html5 - angularjs中外部模版加載無法使用10. node.js - node 客戶端socket一直報錯Error: read ECONNRESET,用php的socket沒問題哈。。
