浅谈 JS 对象

186 阅读2分钟

复杂数据类型

在JS中,object是唯一的复杂数据类型。它存在内存中的Heap区域。

声明对象的两种语法

字面量声明

  1. 示例:let obj = {name:'姓名',age:18}
  2. 该方法较为简洁方便,是声明对象中常用的一种方法。

new关键字声明

  1. 示例:let obj = new Object({name:'姓名',age:18})
  2. 该方法是正规写法,但比较繁琐,所以比较少用。

如何删除对象的属性

delete

  1. 示例:delete obj.name 返回布尔值
  2. 要区分把属性值设置为undefined和把属性名、属性值删除这两种情况
  3. delete 操作是把属性名、属性值一同删除
  4. 由于delete删除不存在的属性也是返回true,所以delete之后可以判断一下属性是否在对象中。

如何查看对象的属性

中括号写法

  1. 示例 obj[name] obj['name']
  2. 中括号里面写的是表达式,表达式的值会转成字符串,该字符串就是属性名。
  3. 因此,中括号写法可以通过变量读取属性值。

点写法

  1. 示例 obj.name
  2. 点后面的字符都是当成字符串处理的,所以不能使用变量。
  3. 该方法较为简洁,也较为常用。

如何修改或增加对象的属性

修改和添加基本是一样的,假如对象已经有该属性了就是修改,没有属性则是添加。

单个属性

  1. 示例 obj.name='新的名字'
  2. 修改或添加单个属性就是读取属性的方法后面加上赋值操作即可。

多个属性

  1. 示例 Object.assign(obj,obj2)
  2. 该方法是ES6新增的API,作用是将obj2的属性复制一份到obj,如果obj已经有属性,则是修改属性。
  3. 该方法只能浅拷贝对象,即属性值是个object\array\function等,只会复制内存地址。

'name' in obj 和 obj.hasOwnProperty('name') 的区别

共同点

  1. 都返回布尔值

不同点

  1. in操作是会判断自身和原型对象是否有该属性。
  2. hasOwnProperty只会判断自身是否有改属性。