JS对象基本用法

127 阅读2分钟

对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。

什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

声明对象的两种语法

  • 写法

可以通过以下三种方式声明:

	let obj = { 'name': 'frank', 'age': 18 }
	let obj = new Object({'name': 'frank'}) 正规的写法
	console.log({ 'name': 'frank, 'age': 18 })
  • 要点

    1. 键名是字符串,不是标识符,可以包含任意字符
    2. 引号可省略(还是字符串(重要)),省略之后就只能写标识符

如何删除对象的属性

delete命令用于删除对象的属性,删除成功后返回true。

  • 写法

delete obj.xxx 或 delete obj['xxx']

  • 要点

    1. 'xxx' in obj === false 表示不含属性名
    2. 'xxx' in obj && obj.xxx === undefined 表示含有属性名,但是值为 undefined
    3. 注意 obj.xxx === undefined 不能断定 'xxx' 是否为 obj 的属性

如何查看对象的属性

查看一个对象本身的所有属性,可以使用Object.keys方法

  • 写法

    • 查看所有属性 Object.keys(obj)
    • 查看自身+共有属性
      console.dir(obj)或者自己依次用 Object.keys 打印出 obj._ proto_
    • 判断一个属性是自身还是共有 obj.hasOwnProperty('toString')
    • 查看单个属性
    1. 两种方法查看属性
    • 中括号语法:obj['key'] --优先使用中括号语法
    • 点语法:obj.key --点语法会误导你,让你以为 key 不是字符串

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

JavaScript 允许属性的“后绑定”,也就是说,你可以在任意时刻新增属性,没必要在定义对象的时候,就定义好属性。

  • 写法

  1. 直接赋值
let obj = {name: 'frank'} // name 是字符串
obj.name = 'frank' // name 是字符串
obj['name'] = 'frank' 
obj[name] = 'frank' // 错,因 name 值不确定
obj['na'+'me'] = 'frank'
let key = 'name'; obj[key] = 'frank'
let key = 'name'; obj.key = 'frank' // 错
因为 obj.key 等价于 obj['key']
  1. 批量赋值
Object.assign(obj, {age: 18, gender: 'man'})  
  • 要点

  1. 无法通过自身修改或增加共有属性
let obj = {}, obj2 = {} // 共有 toString
obj.toString = 'xxx' 只会在改 obj 自身属性
obj2.toString 还是在原型上
  1. 我偏要修改或增加原型上的属性
Object.prototype.toString = 'xxx' 

一般来说,不要修改原型,会引起很多问题

补充:修改或增加原型的共有属性

  • 不推荐使用 proto

    let obj2 = {name: 'jack'}
    let common = {kind: 'human'}
    obj.__proto__ = common
    obj2.__proto__ = common
    
  • 推荐使用 Object.create

    obj.name = 'frank'
    let obj2 = Object.create(common)
    obj2.name = 'jack'
    

要改就一开始就改,不要后来再改

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

'name' in obj是判断name是否是obj对象里所有属性中的一个,而obj.hasOwnProperty('name')是判断name是否是obj对象自身属性中的一个。

总结

对象的增删改查是JS重点,需在实践中所理解多操作。