对象是唯一复杂的数据类型.数组,函数,Date都是对象.对象这种数据类型存放在heap中,因为它有着以下这些增删改查的操作.
如何表示属性名和属性值😊
属性名(property)和属性值(value).属性名采用 'name': deibo这样的写法.要注意属性名无论何时都是一段字符串,这样在引号中你可以写任何字符.但是如果省去了引号,你必须要遵循标识符的规则,但是他依然是字符串.如果属性名先要是一个变量的值,你应该这样表示[name]:deibo.包括变量,表达式他们都会转化成字符串.
声明对象的两种语法😊
let obj = new Object{}这是规范的写法,推荐使用let obj = {}这是简写的方法
如何删除对象的属性😊
delete obj.name注意:delete只能用作删除属性delete obj['name']obj.name = undefined这种情况只是清空了该属性的值,并没有消灭属性名 我们可以用name in obj来检测对象中还存不存在改name属性,注意obj.name===undefined的方法是不对的,他无法检测obj.name = undefined这种情况.
如何查看对象的属性😊
obj.nameobj['name']Object.key(obj)Object.value(obj)查看对象的自身属性值Object.entries(obj)查自身属性名和属性值(不包含共有属性)console.dir(obj)查看对象的自身属性和共有属性obj.hasOwnProperty('toString')判断属性是否是对象的自身属性
如何修改或增加对象的属性😊
let obj.name ='deibo'let obj['name']='deibo'Object.assign(obj, {age: 18, gender: 'man'})批量增加属性方法
那么,如何篡改原型的属性甚至换原型?
obj.toString='deibo'是无法篡改原型的属性的,他可以将原型的属性读到自身里边来,然后改的是自身的属性.以下所有改原型的方法不推荐使用,使用不妥容易造成混乱
obj._protot_.toString ='deibo'不推荐_protot_Object.prototype.toString = 'deibo'let obj = Object.create(common)将__proto__的地址改为了common对象的地址,换原型推荐这种方式但要注意请写到代码最前边,不会影响性能obj2.__protot__ = common不推荐
'name' in obj和obj.hasOwnProperty('name') 的区别
name in obj是用来判断对象里有没有name这个属性,obj.hasOwnProperty('name')是判断name属性是自身的,还是原型给的