声明对象的两种语法:
第一句是习惯用法,第二句才是正规写法
let obj = { 'name': '小明', 'age': 18 }
let obj = new Object({'name': '小明'})
注意:键名是字符串,不是标识符,可以包含任意字符 ;引号可省略,省略之后就只能写标识符 ;就算引号省略了,键名也还是字符串(重要)
如何删除对象的属性:
使用下面语句
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.keys(obj)
查看自身+共有属性
console.dir(obj)
或者自己依次用 Object.keys 打印出 obj.__proto__
判断一个属性是自身的还是共有的:
obj.hasOwnProperty('toString')
如何修改或增加对象的属性:
直接赋值 :
let obj = {name: '小明'} // name 是字符串
obj.name = '小明' // name 是字符串
obj['name'] = '小明'
//obj[name] = '小明' // 错,因 name 值不确定
obj['na'+'me'] = '小明'
let key = 'name';
obj[key] = '小明';
//let key = 'name'; obj.key = '小明' // 错,因为 obj.key 等价于 obj['key']
批量赋值 :
Object.assign(obj, {age: 18, gender: 'man'})
'name' in obj和obj.hasOwnProperty('name') 的区别:
1. hasOwnProperty 方法用于判断对象“自身”是否有某个属性:
2. in 用于判断对象“自身”及其“继承对象”是否具有某个属性:
举个栗子:

应用:
可以判断一些新属性和方法是否支持,如下 :
1. 想判断浏览器是否支持“__proto__"属性 // ‘__proto__’ in {}
2.判断浏览器是否支持“bind”方法 // "bind" in new Function()