# ❓ 输出以下代码运行结果
// example 1
var a = {},
b = '123',
c = 123
a[b] = 'b'
a[c] = 'c'
console.log(a[b])
// example 2
var a = {},
b = Symbol('123'),
c = Symbol('123')
a[b] = 'b'
a[c] = 'c'
console.log(a[b])
// example 3
var a = {},
b = { key: '123' },
c = { key: '456' }
a[b] = 'b'
a[c] = 'c'
console.log(a[b])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
还是比较简单的
答案
c
b
c
1
2
3
2
3
// example 1
var a = {},
b = '123',
c = 123
a[b] = 'b'
// 这里的 c 会被转换成字符串 '123' 从而会覆盖 b
a[c] = 'c'
console.log(a[b])
// example 2
var a = {},
b = Symbol('123'),
c = Symbol('123')
// Symbol 每次生成的唯一值 虽然入参都是 '123'
// 而且键名不需要转换 不会覆盖
a[b] = 'b'
a[c] = 'c'
console.log(a[b])
// example 3
var a = {},
b = { key: '123' },
c = { key: '456' }
// 这里对象作为键 回调用 toString 方法转换成 '[object object]'
// 会再次覆盖
a[b] = 'b'
a[c] = 'c'
console.log(a[b])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28