object 对象 及原型原型链
对象的定义
满足两个条件 :
1.无序的数据集合
2.键值对的集合
写法:
let obj = {'name':'frank',’age‘:18}
let obj = new Object({'name':'frank','age':18})
注意细节:
键名是字符串,不是标识符,可以任意字符
键的引号可以省略,省略之后就只能写标识符
——————————重点 就算引号省略了,键名也还是字符串—————
使用Object.keys(obj) 可以得到obj的所有key
变量做属性名
如何用变量做属性名
变量做属性名let pp = 'name'
let obj={pp:'frank'} 这样写 属性名为"obj” 这种方法无法得到变量名pp 只能得到字符串"pp"
let obj ={[pp]:'frank'} 【pp】这种方法可以得到变量pp // name:frank
删除属性
delete obj.name 或者 delete obj['name']
请区分属性值为undefined 和不含属性名
不含属性名(查看是否含有属性名方法:'XXX' in obj === false)
含有属性名,但是值为undefined
"xxx" in obj && obj.xxx ===undefined
查看属性
查看自身所有属性
Object.keys(obj) //查看所有的key
Object.values(obj) //所有的value
Object.entries(obj) //key和value值 以数组形式查看
查看自身+共有属性
console.dir(obj) 推荐用法
或者自己依次用Object.keys打印出obj.__proto__(不推荐,因为它里面的共有属性比较多)
判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
总结:'name' in obj 和obj.hasOwnProperty('name')的区别:前者为查看是否有属性名 后者是判断一个属性是自身属性还是共有属性
修改或者添加属性
修改属性 var obj={name:'frank' ,age:18} 修改属性直接obj.name重新赋值 写法 obj.name = 'lulu'
添加属性 obj.wuwuwu = 'wuwuwu'
批量添加属性 Object.assign(obj,{p1:1,p2:2,p3:3,p4:4})
修改 添加 批量添加属性修改或者增加共有属性:
比如上面的obj 我们可以通过修改它的obj.__proto__来修改原型 但是这种方法不推荐 一般推荐用另一种 window.Object.prototype
window.Object.prototype=obj.__proto__ //true
对象的原型图
本图为饥人谷教程图