对象的定义:
无序的数据集合,键值对的集合
声明对象
- obj的key 只能字符串,可以包含任意字符
- key可以省略引号,省略后就只能写标识符
- 省略引号,key还是字符串
let obj = { 'name': 'wsl', 'age': 18 }
let obj = new Object({'name': 'wsl'})
console.log({ 'name': 'wsl', 'age': 18 })
删除对象的属性
let obj = {xxx:1,yyy:2}
delete obj.xxx
delete obj['xxx']
let key = 'xxx'
delete obj[key]
查看对象的属性
// 查看对象所有的key
Object.keys(obj)
// 查看所有的value
Object.values(obj)
// 查看所有的key 和 value
Object.entries(obj)
// 通过目录的形式 在控制台打印出来 查看 自身属性 和原型属性
console.dir(obj)
//判断一个属性是自身的还是原型的
obj.hasOwnProperty('toString')
obj['xxx']
obj.xxx // xxx 是字符串
obj[xxx] // xxx 是变量
// 查看原型属性
Object.keys打印出 obj.__ proto_
修改或增加对象的属性
let obj = {name: 'frank'} // name 是字符串
obj.name = 'frank' // name 是字符串
obj['name'] = 'frank'
obj[name] = 'frank' // 错,因 name是变量 值不确定 undefined
obj['na'+'me'] = 'frank'
let key = 'name'; obj[key] = 'frank'
let key = 'name'; obj.key = 'frank' // 错 key 是字符串
// 批量赋值
Object.assign(obj, {age: 18, gender: 'man'})
// 修改原型属性
Object.prototype.toString = 'xxx'
// 不推荐用 __proto__ 最好在创建实例之前就修改好原型
obj.__proto__.toString = 'xxx'
//使用现有的对象来提供新创建的对象的__proto__
let obj = {name:'frank'}
let obj2 = {name: 'jack'}
let common = {kind: 'human'}
obj = Object.create(common)
obj.name = 'frank'
obj2 = Object.create(common)
obj2.name = 'jack'
'name' in obj和obj.hasOwnProperty('name') 的区别
obj.hasOwnProperty('name') 只会在当前对象上查找
'name' in obj会在原型链上查找