复杂数据类型
在JS中,object是唯一的复杂数据类型。它存在内存中的Heap区域。
声明对象的两种语法
字面量声明
- 示例:
let obj = {name:'姓名',age:18} - 该方法较为简洁方便,是声明对象中常用的一种方法。
new关键字声明
- 示例:
let obj = new Object({name:'姓名',age:18}) - 该方法是正规写法,但比较繁琐,所以比较少用。
如何删除对象的属性
delete
- 示例:
delete obj.name返回布尔值 - 要区分把属性值设置为undefined和把属性名、属性值删除这两种情况
- delete 操作是把属性名、属性值一同删除
- 由于delete删除不存在的属性也是返回
true,所以delete之后可以判断一下属性是否在对象中。
如何查看对象的属性
中括号写法
- 示例
obj[name]obj['name'] - 中括号里面写的是表达式,表达式的值会转成字符串,该字符串就是属性名。
- 因此,中括号写法可以通过变量读取属性值。
点写法
- 示例
obj.name - 点后面的字符都是当成字符串处理的,所以不能使用变量。
- 该方法较为简洁,也较为常用。
如何修改或增加对象的属性
修改和添加基本是一样的,假如对象已经有该属性了就是修改,没有属性则是添加。
单个属性
- 示例
obj.name='新的名字' - 修改或添加单个属性就是读取属性的方法后面加上赋值操作即可。
多个属性
- 示例
Object.assign(obj,obj2) - 该方法是ES6新增的API,作用是将obj2的属性复制一份到obj,如果obj已经有属性,则是修改属性。
- 该方法只能浅拷贝对象,即属性值是个object\array\function等,只会复制内存地址。
'name' in obj 和 obj.hasOwnProperty('name') 的区别
共同点
- 都返回布尔值
不同点
- in操作是会判断自身和原型对象是否有该属性。
- hasOwnProperty只会判断自身是否有改属性。