声明对象的两种语法
- let obj = {'name': 'june', 'age':18}
- let obj = new Object({'name':'june'})
- 键名是字符串,引号可以省略,键名也还是字符串
- 除了字符串,symbol也能做属性名
let a = Symbol()
let obj = {[a]:'Hello'}
- Object.keys(obj)
- 变量作属性名
[]
let p1 = 'name'
let obj1 = {[p1]:'june'}
{name: "june"}
- 对象的隐藏属性
- JS中每一个对象都有一个隐藏属性
- 这个隐藏属性储存着其共有属性组成的对象(原型)的地址
var obj = {}
obj.toString()
如何删除对象的属性
delete obj.xxx
let obj = {'name': 'june', 'age':18}
delete obj.name
{age: 18}
'name' in obj === false
obj.name === undefined true
delete含有属性名,但值为undefined
'xxx' in obj && obj.xxx === undefined
obj.xxx === undefined不能断定xxx是否是obj的属性
如何查看对象的属性
- 查看自身所有属性
Object.keys(obj) - 查看自身+共有属性
console.dir(obj) - 判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString') - 两种方法查看属性
obj['key']obj.key
原型
- 每个对象都有原型
- 原型里存着对象的共有属性
- 比如obj的原型就是一个对象
obj.__proto__存着这个对象的地址- 这个对象里有toString/constructor/valueOf等属性
- 对象的原型也是对象
- 对象的原型也是原型
obj={}的原型即为所有对象的原型- 这个原型包含所有对象的共有属性,是对象的根
- 这个原型也有原型,是
null
如何修改或增加对象的属性
- 直接赋值
obj['name'] = 'june'
- 批量赋值
Object.assign(obj,{age: 18, gender: 'man'})
修改或增加共有属性
- 无法通过自身修改或增加共有属性
- 硬要修改或增加原型上的属性(不推荐用__proto__)
Object.prototype.toString='xxx'
总结
- 删
- delete obj['name']
- 'name' in obj //false
- obj.hasOwnProperty('name') //false
- 查
- Object.keys(obj)
- console.dir(obj)
- obj['name']
- obj.name //name是字符串
- obj[name] //name是变量
- 改
- 改自身 obj["name"] = 'weng'
- 批量改自身 Object.assigh(obj,{age:18})
- 改共有属性 Object.prototype['toStirng']='xxx'
- 改原型 let obj = Object.create(common)
-
增
同改