对象的特点
- 用键值对来(又称为属性名和属性值)描述一个对象
- {key:value,}
- key不可以是引用类型,value可以是任何类型
- key不能重复
- 数组是特殊的对象
- key是0,1,2…,每一个数字代表当前项的位置,把这种数字属性名称为”索引“
- 默认有一个length属性储存数组的长度 arr.length/arr[“length”]可以获取数组的长度
对象的增删改查
- 对象.属性名 = 属性值
这样操作key不可以是数字 - 对象[属性名] = 属性值
其他非字符串格式作为key和把它转化为字符格式没啥区别
console.log(obj[1]);
console.log(obj["1"])
字符串格式可不能乱写,因为js会以为是变量
obj.key1 = value;
obj['key2'] = value2
// Error: key is not defined
// obj[key2] = value2
- 如果要获取的属性不存在,获取到的属性值是undefined,不会报错
- Object.keys(obj) 返回的结果是包含所有属性名的数组
- Object.entries(obj)
- 删除
//假删除
obj.key = null;
//真删除
delete obj.key;
为什么key不可以是引用类型
- 属性名的值
let n = 100;
let obj = {};
//obj.n = 200//=> {n:200} key是“n”
//obj["n"] = 200//=> {n:200} key是“n”
//obj[n] = 200//=> {100:200} key是100(数字格式)
基于 对象[属性名] 的方式操作,需要保证key是一个值(基本类型:字符串/数字/布尔/undefined/null都可),如果不是值而是一个变量。会把变量储存的的值作为key进行操作
- 如果变量是引用类型会先转化为字符串(普通对象转化为字符串都是"[object Object]",数组转化为字符串))
let n = {x: 100};
let m = [100,200];
obj[n] = "item1"//=> {"[object Object]":"item1"}
obj[m] = "item2"//=>{"100,200":"item2"}