最近在和后台联调接口时发现了一些恶心的对象结构,类似这样。
const a = {
'0': 'a',
'1': 'b',
'2': 'c',
}
当需要取对象中的值时,只能够通过a['0']
这种方式。而通过a.0
获取会提示
Uncaught SyntaxError: Unexpected number
前者属于键值(key)访问,而后者则是通过属性(property)访问。在普通的对象中,使用任意方法都能够获取到对应的值。但通过属性访问后面需要一个标识符兼容的属性名,而通过键值访问则可以接受任意兼容UTF-8/unicode的字符串作为属性名。
所以当我们需要访问对象a的’0‘属性时,只能通过键值的形式访问。
有意思的是,在js中,数组也是对象,数组的索引就是属性名,所以我们会发现,数组的索引不是 Number 类型 而是 String 类型,数组也需要通过属性(property)进行访问。
我们可以直接使用 array[0] 的写法。js自动将 Number 类型的 0 转换成了String 类型的 "0"
const array = ['a', 'b', 'c']
console.log(array['0']) // a