javascript - js对象 属性的访问和创建
ringa_lee
ringa_lee 2017-07-05 10:58:49
[JavaScript讨论组]

一个有意思的问题:

  1. 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
  2. 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

这里其实涉及到的就是[]运算符 和.运算符 相关知识。

附上相关规则和网址,你们自己研究吧:

MemberExpression : MemberExpression [ Expression ]

  1. Let baseReference be the result of evaluating MemberExpression.

  2. Let baseValue be GetValue(baseReference).

  3. ReturnIfAbrupt(baseValue).

  4. Let propertyNameReference be the result of evaluating Expression.

  5. Let propertyNameValue be GetValue(propertyNameReference).

  6. ReturnIfAbrupt(propertyNameValue).

  7. Let bv be RequireObjectCoercible(baseValue).

  8. ReturnIfAbrupt(bv).

  9. Let propertyKey be ToPropertyKey(propertyNameValue).

  10. ReturnIfAbrupt(propertyKey).

  11. 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.

  12. 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

  1. Let baseReference be the result of evaluating MemberExpression.

  2. Let baseValue be GetValue(baseReference).

  3. ReturnIfAbrupt(baseValue).

  4. Let bv be RequireObjectCoercible(baseValue).

  5. ReturnIfAbrupt(bv).

  6. Let propertyNameString be StringValue of IdentifierName

  7. 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.

  8. 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

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
某草草

其实就是个 Object toString 的问题。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号