声明对象的两种语法
let obj = {'name' : 'xxx' , 'age' : 18}
let obj = newObject({'name' : 'xxx'})
- 建名是字符串,不是标识符,可以包含任意字符
- 建名引号可以省略,省略之后只能写标识符
变量作属性名
let p1 = 'xxx'
let obj = {p1 : 1}//属性名为p1
let obj = {[p1] : 1}//属性名为xxx
- 不加[]的属性名会自动变成字符串
- 加[]的属性名则会当做变量求值
删除对象的属性
不含属性名
var obj = {'xxx' : 1}
delect obj.xxx
'xxx' in obj //false
obj//{}
或者
var obj = {'xxx' : 1}
delect obj['xxx']
'xxx' in obj //false
obj//{}
含属性名
var obj = {'xxx' : 1}
obj.xxx = undefined
'xxx' in obj //true
'xxx' in obj === undefined//false
obj//{'xxx' : undefined}
查看对象属性
- 查看对象自身所有属性
Object.keys(obj) - 查看对象自身+共有属性
console.dir(obj) - 判断属性是否是对象自身的还是共有的
obj.hasOwnProperty('属性名') - 查看对象某一个属性
obj.xxx和obj['xxx']
修改或增加属性
直接赋值
let obj = {'xxx': '111'}
obj.xxx = '111'
obj['xxx'] = '111'
obj['xx'+'x'] = '111'
let key = 'xxx'; obj[key] = '111'
批量赋值
Object.assign(obj, {'xxx': 111, 'yyy': '222'})
无法通过自身修改或增加共有属性
let obj = {}, obj2 = {} // 共有 toString
obj.toString = 'xxx' 只会在改 obj 自身属性
obj2.toString 还是在原型上
修改隐藏属性
let common = {'xxx':1}
let obj = Object.create(common)
例子:
let common = {'zzz':3}
let obj = Object.create(common)
Object.assign(obj,{'xxx':1,'yyy':2})
obj
最后得到: