声明对象的两种语法
写法
第一种
let obj = {'name':'bbter','age':18}
第二种
let obj = new Object({'name':'bbter'})
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可以省略,省略之后就只能写标识符
- 就算引号省略了,键名也还是字符串
如何删除对象的属性
- delete obj.xxx 或 delete obj['xxx']
- 即可删除obj的xxx属性
- 区分属性值为undefined 和 不含属性名
- 不含属性名
'xxx' in obj === false
- 含有属性名,但是值为undefined
'xxx' in obj && obj.xxx === undefined
- 注意 obj.xxx === undefined
不能判断'xxx'是否为obj的属性
如何查看对象的属性
- 查看自身所有属性
Object.entries(obj) 查看对象的key 与 value
Object.keys(obj) 查看对象的key
- 查看自身 + 共有属性
console.dir(obj)
或者自己依次用Object.keys打印出obj._ _ proto _ _
- 判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
- 两种方法查看属性
中括号语法: obj['key']
点语法:obj.key
坑新人语法: obj[key] //变量key 值一般不为'key'
-
优先使用中括号语法
点语法会误导你,让你以为key不是字符串
等你确定不会弄混两种语法,再改用点语法
如何修改或增加对象的属性
- 直接赋值
let obj = {name:'bbter'} // name是字符串
obj.name = 'bbter' // name是字符串
obj['name'] = 'bbter'
obj['na' + 'me'] = 'bbter'
let key = 'name'; obj[ket] = 'bbter'
- 批量赋值
Object.assign(obj,{age:18,gender:'man'})
- 增
基本同上:已有属性则改;没有属性则增。
'name' in obj和obj.hasOwnProperty('name') 的区别
使用in判断对象中是否由属性时,若自身没有,在原型中找到也是返回true
使用hasOwnproperty()判断对象是否含有属性时,只有自身有才后返回true