object是第七种数据类型,唯一一种复杂类型
声明
最常用的简单写法
let obj = {'name': 'frank', 'age': 18}
obj.name = 'frank' //name是字符串
obj.['name'] = 'frank'
细节
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可省略,省略之后就只能写标识符
- 就算引号省略了,键名也还是字符串
删除
删除obj的xxx属性
detele obj.xxx 或者 delete obj['xxx']
判断不含属性名
'xxx' in obj === false(xxx一定要加单引号)
判断含有属性名,但属性值为undefined
'xxx' in obj &&obj.xxx === undefined
查看
输入属性名查看属性值
obj['key']
obj.key
这里的 name 是字符串 ,等价于obj['name']
点语法会误导你,让你以为key不是字符串
obj[key]
这里的 key 是变量,循环打印的时候会用到这种写法,因为可以不断的替换变量的值
js会求[ ] 中表达式的值
查看自身所有属性名
Object.keys(obj)
查看自身+共有属性
console.dir(obj)
判断一个属性是自身的还有共有的
obj.hasOwnProperty('toString')
结果true就说明是自身的
key in obj 和 obj.hasOwnProperty('toString')的区别
'key' in obj 不能判断出这个属性是自身属性还是共有属性
obj.hasOwnProperty('key') 可以判断出这个属性是自身属性还是共有属性
浏览器控制台直接输入对象的名字: obj 再按回车
就会返回对象的所有属性名和属性值
修改
改自身:obj['name'] = 'jack'
批量赋值: Object.assign(obj, {age: 18,gender: 'man'})
不推荐修改原型
改原型:let obj = Object.create(common)