1 基本概念
-
属性名:每个key都是对象的属性名(property);
-
属性值:每个value都是对象的属性值;
2 属性名
- 奇怪的属性名
- 变量作属性名
- symbol作属性名,迭代时会用到
let a = Symbol()
let obj = { [a]:'Hello' }
- 对象的隐藏属性:__ proto__
3 删除属性
- obj.xxx===undefined 不能断定'xxx'是否为obj的属性
- in 判断是否含有属性名,obj.hasOwnProperty('属性名')是判断该属性是否为自有属性;
4 查看所有属性(读属性)
- 查看属性值
-
obj.name 等价于 obj['name'] ,obj.name 不等价于 obj[name] ;在这里面,name是字符串,而不是变量; -
let name='frank' obj[name] 等价于 obj['frank'] ,而不是 obj['name'] 和 obj.name这里面,点语法和中括号语法是读取属性值,obj['name']=obj.name=frank,而中括号加变量,是把变量的值作为属性名,即obj[name]=obj['frank'],而obj['name'] != obj['frank']
-
读取属性名的方法
-
判断自由属性和共有属性
-
Object.keys()、Object.values()、Object.entries()
5 修改或增加属性(写属性)
-
直接赋值
-
批量赋值:Object.assign()
Object.assign(obj,{age:18,gender:'man'}) -
修改或增加共有属性
- 修改隐藏属性,__proto__会修改所有对象的隐藏属性,不要使用
- Object.create()只会修改单个对象的隐藏属性,推荐使用
6 原型
-
原型的原型为:null
-
var声明的变量会自动挂在window上: