第85题 下面这道题输出什么

    // example1
    var a = {},b='123',c=123
    a[b] = 'b'
    a[c] = 'c'
    console.log(a[b])
    
    // example2
    var a = {},b=Symbol('123'),c=Symbol('123')
    a[b] = 'b'
    a[c] = 'c'
    console.log(a[b])
    
    // example3
    var a = {},b={key:'123'},c={key:'456'}
    a[b] = 'b'
    a[c] = 'c'
    console.log(a[b])
```**答案**  
```js
    // 答案
    c
    b
    c

解析

  • JS对象key的数据类型
    • 只能是字符串和symbol类型
    • 其他类型会被转化为字符串
    • 字符串会直接调用toString方法
  • 拓展:MapWeakMapkey
    • Map的key`可以是任意类型
    • WeakMapkey只能是引用类型,不能是值类型
    // example1
    var a = {},b='123',c=123
    a[b] = 'b'
    a[c] = 'c' // c是数字会被转为字符串a['123'] = 'c' 覆盖上一个'b'
    console.log(a[b]) // c
    
    // example2
    var a = {},b=Symbol('123'),c=Symbol('123')
    a[b] = 'b' // Symbol('123')是一个独一无二的值,每次都不一样。不会被覆盖
    a[c] = 'c' 
    console.log(a[b]) // b
    
    // example3
    var a = {},b={key:'123'},c={key:'456'}
    a[b] = 'b' // 对象作为key被被转为'[object Object]'  a['[object Object]'] = 'b'
    a[c] = 'c'
    console.log(a[b]) // c
Last Updated:
Contributors: leeguooooo