javascript - js對(duì)象 屬性的訪問和創(chuàng)建
問題描述
一個(gè)有意思的問題:
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
這里其實(shí)涉及到的就是[]運(yùn)算符 和.運(yùn)算符 相關(guān)知識(shí)。
附上相關(guān)規(guī)則和網(wǎng)址,你們自己研究吧:
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:其實(shí)就是個(gè) Object toString 的問題。
相關(guān)文章:
1. macos - mac下docker如何設(shè)置代理2. dockerfile - 為什么docker容器啟動(dòng)不了?3. javascript - 如何獲取未來元素的父元素在頁面中所有相同元素中是第幾個(gè)?4. Android下,rxJava+retrofit 并發(fā)上傳文件和串行上傳文件的效率為什么差不多?5. apache - 本地搭建wordpress權(quán)限問題6. javascript - 學(xué)習(xí)網(wǎng)頁開發(fā),關(guān)于head區(qū)域一段腳本的疑惑7. Whitelabel錯(cuò)誤頁面發(fā)生意外錯(cuò)誤(類型=未找到,狀態(tài)= 404)/WEB-INF/views/home.jsp8. 熱切期待朱老師的回復(fù),網(wǎng)頁視頻在線播放器插件配置錯(cuò)誤9. angular.js - ng-grid 和tabset一起用時(shí),grid width默認(rèn)特別小10. objective-c - iPhone如何實(shí)現(xiàn)微信的搖一搖功能?
