JavaScript学习笔记 - 对象的基本用法

220 阅读2分钟

一、基本概念

1.1 对象的构成

对象(object)是 JavaScript 语言最重要的数据类型。简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据的集合。声明一个对象的方法为:

let obj = {
  'foo': 'Hello',
  'bar': 'World'
}

或者

let obj = new Object({'foo': 'Hello', 'bar': 'World'})

对象中包括键名(属性名)和键值(属性值)两种基本单元。

键值非常简单,它可以是任意一种数据类型,没有特殊要求。

而键名都是字符串,并且可以是任意的字符串。它的引号可以省略,但即便是省略了引号,它仍然会自动转为字符串。只不过在省略引号时,键名就必须要符合标识符的规则了。

变量也可以作为键名,但是要加上[]:

let a = 'xxx'
let obj = {[a]: 'yyy'}

如果变量的值不是字符串,则会自动转为字符串。

1.2 隐藏属性

每个对象都有隐藏属性,这些隐藏属性通常是对象的共有属性,因此隐藏属性指向共有属性所组成的对象,这个对象称之为原型。例如:

let obj = {}
obj.toString()

obj 本身没有属性 toString,但是它的原型中存在 toString 属性,因此不会报错。

二、对象的操作

2.1 删除对象的属性

delete obj.xxx即可 obj 的 xxx属性。

'xxx' in obj可以判断 obj 中是否有 xxx 属性,无此属性会返回 false。然而这样并不能判断 xxx 是否是其本身的属性,用obj.hasOwnProperty('xxx') 可以判别 obj 本身有无 xxx 属性。

obj.xxx === undefined并不能判断 obj 中是否有 xxx。

2.2 属性的查看

Object.keys(obj) //查看所有属性名,不包括隐藏属性
Object.values(obj) //查看所有属性值,不包括隐藏属性
Object.entries(obj) //查看所有属性名和属性值,不包括隐藏属性
console.dir(dir) //以目录形式查看对象的所有属性,包括隐藏属性

2.3 属性的读取

  • 中括号语法:obj['xxx']
  • 点语法:obj.xxx

注意,obj[xxx],并非是读取 'xxx' 属性,这里的 xxx 会被视为变量。

2.4 属性的增改

  • 直接赋值
let obj = {name: 'xxx'}
obj.age = 18
obj['name'] = 'yyy'
obj['na' + 'me'] = 'zzz'
  • 批量赋值
Object.assign(obj, {name: 'xxx', age: 18})
  • 修改隐藏属性
let common = {kind: 'human'}
let obj = Object.create(common) //common 作为 obj 的隐藏属性