JS 对象基本用法

111 阅读1分钟

1. 对象

1.1 定义

  • 无序的数据集合
  • 键值对的集合

1.2 声明对象的写法

let obj = {'name': 'hello' , 'age' : 18} 或者写成 let obj = new Object ({ 'name' : 'hello'})

上面的写法是等价的。甚至可以console.log({'name' : 'hello'})来声明对象

1.3 注意

  • 键名是字符串,不是标识符,可以包含任意字符
  • 引号可以省略,但省略之后只能写标识符
  • 即便省略引号,键名依旧是字符串

2. 如何删除对象的属性

  • delete obj.xxx或delete obj['xxx']:可以删除obj的xxx属性
  • 'xxx' in obj ===false: 表示不含属性名
  • 'xxx' in obj && obj.xxx ==undefined:表示含有属性名,但是值为undefined

注意:使用obj.xxx === undefined不能断定'xxx' 是否为obj的属性

3. 如何查看对象属性

3.1 查看所有属性

  • Object.keys(obj):查看自身所有属性
  • console.dir(obj):查看自身+共有属性
  • obj.hasOwnProperty('toString')

3.2 查看属性

  • obj['key']
  • obj.key

建议:优先使用中括号语法,点语法会误导你,让你以为key不是字符串

4. 修改或添加属性

4.1 修改或添加自身属性

  • 直接赋值:let obj = {name : 'hello'}或者obj.name = 'hello'
  • 批量赋值:Object.assign(obj,{age : 18,gender: 'gril'})

4.2 修改或添加共有属性

不推荐写法:obj.proto['toString'] = 'xxx'

推荐写法:Object.prototype['toString'] = 'xxx'

4.3 修改或添加原型

不推荐写法:obj.proto=common

推荐写法:let obj = Object.create(common)

注意:一般涉及__proto__的代码都是不建议写的

5. 'name' in obj和obj.hasOwnProperty('name')

obj.hasOwnProperty用来判断一个属性是自身还是共有的;而'name' in obj只判断是否含有属性名,两个是不一样的。