Hello大家好!我是Cathy海希。
对象,作为JavaScript(以下简称JS)7大数据类型里最复杂的一种,要学习的东西可就多咯~快来跟我一起查漏补缺吧!
声明对象的两种语法
- 正规写法
let obj = new Object({'name':'Cathy'})
- 简单常用的写法
let obj = {'name': 'Cathy'} // 注意!这里的'name'即使把引号去掉它也是字符串。
如何删除对象的属性
delete
操作符用于删除对象的某个属性(属性名+属性值)delete obj.name | delete obj['name']
- 如果只想删除对象的属性值的话
obj.name = undefined // 但是'name'这个属性名还在,只是属性值变成咯undefined而已。
如何查看对象的属性
查看属性分为查看对象的所有属性和单个属性。
查看所有属性
- 查看自身特有的属性
Object.keys(obj2)
查看自身特有的keys;Object.values(obj2)
查看自身特有的values;Object.entries(obj2)
查看自身所有的keys+values;
- 查看自身特有的+共有属性

console.dir(obj2)
来查看自身特有的属性+共有属性。
查看单个属性
总共有3种方法。
obj['name']
👈优先使用这个方法!'name'是字符串,看得清清楚楚。obj.name
👈这个用法会误导我们!让我们误以为name不是字符串。obj[name]
👈这里的name是变量!!最危险的用法⚠️
如何修改或增加对象的属性
- 修改自身属性
- 单个修改:
obj['name'] = 'Jack'
- 批量修改:
Object.assign(obj,{age:18,...})
- 单个修改:
- 修改共有属性
obj.__proto__['toString'] = 'xxx'
Object.prototype['toString'] = 'xxx'
(整个JS全被改了)
- 修改原型
obj.__proto__ = common
let obj = Object.create(common)
⚠️注意:所有__proto__代码都是强烈不推荐写的!!
增加属性的话基本同上,已有属性则改;没有属性则增。
'xxx' in obj
和obj.hasOwnProperty('xxx')
的区别
概括来说这两者都可以判断obj
这个对象是否含xxx
这个属性,但是:
'xxx' in obj
无法区别是自身的还是原型上的。看截图,不管是obj的自身属性name
还是共有属性toString
,它都会返回true。- 那我那如何判断一个属性是自身特有的还是共有的呢?🤔看截图
obj.hasOwnProperty('toString') === false
说明toString
不是它自身特有的属性!obj.hasOwnProperty('name') === true
说明name
是它自身特有的属性!

总结
怎么样?对象相关的知识点是不是很多呢?我们只能耐心地记忆,然后经常性地回顾啦! See you next time!👋