首页 > 试题广场 >

对以下Javascript代码运行结果的描述错误的是:()

[不定项选择题]
对以下Javascript代码运行结果的描述错误的是:()

    ```javascript
    var a = {},
        b = { key: 'b' },
        c = { key: 'c' };

    a[b] = 123;
    a[c] = 456;
    ```

  • 变量 `a` 有两个属性
  • `console.log(a[b])` 输出 `123`
  • `console.log(a[c])` 输出 `456`
  • `console.log(a[a])` 输出 `undefined`
对象添加属性有两种方式 第一种点语法,如 obj.a=1;第二种[]语法,如 var a = 'hello', obj[a] = 'Joe' ,此时访问obj.hello可以得到'Jeo' 。题目传入的是一个对象,所以会隐式调用对象的toString方法,把对象转化为字符串 。执行 a[b] = 123 时 , a对象里是这样的 { '[object Object]' : 123 } 。同理, a[c] = 345 , 把[object Object]重新赋值 。所以 a对象只有一个属性; 输出a[b] 相当于输出a的[object Object]属性,得到345; a[a]同样得到345;
编辑于 2019-03-27 22:37:35 回复(0)
obj[x]相当于obj在内存中申请了一块空间用来存储变量属性,所以obj[a],obj[b]....的内存地址都是指向同一块内存的,所以不管是obj[]什么,只要是[]里面的都会指向同一个内存地址,重复赋值会覆盖之前的
编辑于 2019-04-15 10:54:34 回复(0)
https://blog.csdn.net/hellokingqwe/article/details/52688017  这个上面解释得挺详细的。
发表于 2019-04-01 14:35:55 回复(0)
这道题是考擦的是[]用法,在任何情况下对象使用[]调用属性的之前会调用tostring方法方法,会把这个a/b/c都作为属性的都转化为[object Object],所以这里面只有a对象里面只有一个属性就是[object Object],然后最后赋值操作是456,所以这三个属性其实就是一个属性而已键值都是456,所以ABD都错

编辑于 2019-03-29 14:39:39 回复(0)
有意思,蘑菇街的题看似简单,每一道都得看仔细咯
发表于 2019-08-05 21:01:33 回复(0)
var 定义的是全局变量(var没有在某个函数内部),定义了对象 a ,b , c , 全局变量会使后面内容覆盖前面的内容,即 a[c] = 456  覆盖前面的 a[b] = 123 ;
所以打印 a[a] , a[b] , a[c] 它们的值都是 456  。题目问的是错误的,所以不能选 C
编辑于 2019-07-20 11:37:26 回复(0)
正确答案:A B D,对象里的属性进行赋值时,里面的属性名不能重复。
发表于 2019-04-22 19:44:28 回复(0)
还是不懂

发表于 2019-04-07 19:24:26 回复(1)
看错题目。。。
发表于 2019-03-31 22:31:34 回复(0)