定义
- 无序的数据组合
- 键值对的集合
声明对象的写法
let obj = {'name': 'huangjingjing',age: 18}
let obj = new Object({'name': 'huangjingjing',age: 18})
Tips
- 键名是字符串,不是标识符,可以包含任意字符。
- 引号可以省略,省略后只能写标识符。
- 就算引号省略了,键名还是字符串 (通过Object.keys可以访问对象的键名)
用变量作为键名
let a = 'xxx'
let obj = {
[a]: 111
}
对象属性的增删改查
删除属性
delete obj.xxx 或 delete obj['xxx']
判断是否删除成功
'name' in obj === false
查看属性
查看属性名
Object.keys(obj)
查看属性值
Object.values(obj)
查看每一个键值对的属性和值
Object.entries(obj)
let obj = {name:'jack',age:18}
Object.keys(obj) // ["name","age"]
Object.values(obj) // ["jack",18]
Object.entries(obj) // [["name","jack"],["age",18]]
查看一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
修改或增加属性
直接赋值
let obj = {name:'jack',age:18}
obj.name = 'rose' // "rose",如果对象没有这个属性则会添加
// obj = {name: "rose", age: 18}
或
obj['name'] = 'jack' // "jack"
// obj = {name: "jack", age: 18}
批量赋值
Object.assign(obj, {age: 18, gender: 'man'})
'name' in obj 和 obj.hasOwnProperty('name') 的区别
'name' in obj 是判断 obj 对象本身有没有 name 属性。而obj.hasOwnProperty('name') 是判断 obj 的原型上有没有 name 属性。一般来说对象的原型上会有 constructor、toString、valueOf等属性。