哪些类型可以作为对象的键名呢?常见的字符串?还是数字,函数都可以?如果不可以会如何转换呢?
对象键名的转换
- 对象的键名只能是字符串和Symbol类型
- 其它类型的键名会被转换成字符串类型
- 对象转字符串默认会调用 toString 方法
栗子1:1
2
3
4
5
6
7
8var a = {}, b = '123', c = 123;
a[b] = 'b';
// c 的键名会被转换成字符串‘123’,会覆盖掉 b
a[c] = 'c';
//输出 c
console.log(a[b])
栗子21
2
3
4
5
6
7
8
9
10var a = {}, b = Symbol('123'), c = Symbol('123');
// b 是 Symbol 类型,不需要转换
a[b] = 'b';
// c 是 Symbol 类型,不需要转换。任何一个 Symbol 类型的值都是不相等的,所以不会覆盖掉 b。
a[c] = 'c';
//输出 b
console.log(a[b])
栗子31
2
3
4
5
6
7
8
9
10
11
12var a={}, b={key:'123'}, c={key:'456'};
// b 不是字符串也不是 Symbol 类型,需要转换成字符串。
// 对象类型会调用 toString 方法转换成字符串 [object Object]。
a[b]='b';
// c 不是字符串也不是 Symbol 类型,需要转换成字符串。
// 对象类型会调用 toString 方法转换成字符串 [object Object]。这里会把 b 覆盖掉。
a[c]='c';
// 输出 c
console.log(a[b]);