一、JavaScript 对象
- 对象:某种特定引用数据类型的实例
- 在 JavaScript 中,任何一个引用值,最终都继承自 Object
- 常用内置对象
- Date
- RegExp
- 常用数据对象
- Array
- Array instanceof Object => true
- Function
- Function instanceof Object => true
- Array
- 原始值的包装对象
- Boolean
- Number
- String
二、单例内置对象
- Global
- 全局对象
- 在浏览器端的实现为 window
- Math
- Math instanceof Object => true
- JavaScript 中的数学库
- 保存常用的数学公式、数学值和计算方法
三、常用的集合对象
1. Object
- 创建方式
- 字面量:{}
- 构造函数:new Object()
- ES6 之后,可以根据已有对象创建:Object.create(oriObject)
- 常用的静态方法
- Object.is(a, b)
- Object.create(obj)
- Object.create(null)
- 创建一个没有原型的对象
- 特性
- 访问不存在的属性值时,得到的结果为 undefined
2. Array
- 创建方式
- 字面量:[]
- 构造函数:new Array(length)/new Array(v1, v2)
- ES6 之后,可根据任意可迭代对象创建:Array.from(iterableObject)
- 特性
- 最终继承自 Object
- 任意 index 均可访问
- 访问没有值的 index 时,得到的结果为 undefined
- 如果给超出长度的 index 位置设置值,则数组长度会变为 index+1,没有设置值的位置都以 Empty 填充
- 注意:Empty 不是指 arr[key] = Empty,仅仅只是一个表示方法而已。
- 不同浏览器对 Empty 的表示不同,可自行尝试,读取这些 index 的值时,得到的结果都是 undefined。
- 常用方法
- 其它
- 将数组作为栈:
- 头栈:unshift(item)/shift()
- 尾栈:push(item)/pop()
- 将数组作为队列:
- 尾队列 (尾进首出) :push(item)/shift()
- 首队列 (首进尾出) :unshift(item)/pop()
- 将数组作为栈:
3. TypedArray
- ArrayBuffer
- SharedArrayBuffer
- DataView
- Int8, Uint8
- Int16, Uint16
- Int32, Uint32, Float32
- Float64
4. 映射
- Map
- 真正的 key/value 存储机制
- 任意数据类型的值都可以作为 key
- 常用方法:
- set(key, value)
- get(key)
- has(key)
- delete(key)
- clear()
- keys()
- entries()
- values()
- WeakMap
- 只能将引用值作为 key
- 与 Map 相比,没有的方法:
- clear()
- keys()
- entries()
- values()
- 常用方法:
- set(key, value)
- get(key)
- has(key)
5. 集合
- 特点:
- 集合内不会存在完全相同的两个值
- 两个完全相同的原始值
- 两个完全相同的引用值
- 注意:引用值的深拷贝结果是允许存在的,因为它们对应不同的引用值
- 集合内不会存在完全相同的两个值
- Set
- 常用方法:
- add(item)
- has(item)
- delete(item)
- keys()
- entries()
- values()
- 常用方法:
- WeakSet
- 集合内的元素只能是引用值
- 常用方法:
- add(item)
- has(item)
- delete(item)
- 没有的方法
- keys()
- entries()
- values()
三、小 tips
- 关于数组
- 数组可以取任意 index (>=0) 的值,也可以给任意 index (>=0) 的索引设置值
- 个人理解:其原因是 Array 最终继承自 Object
- Object 可以给任意属性设置值,获取不存在的属性时,得到的结果为 undefined
- 但如果设置的属性名 (key) 是数字, Array 做了额外的处理:
- key >= length:扩展数组长度,且将 key 对应的 value 设置为指定值,不连续的那一段则使用 Empty 填充
- 数组实例的属性名不一定是自然数,也可以是非数字的属性名
- 数组可以取任意 index (>=0) 的值,也可以给任意 index (>=0) 的索引设置值
- 关于集合 Set
- 个人理解:可以简单地理解为 key 和 value 相同的 Map
- Set 实例的 keys() 和 values() 获取到的结果是一样的,都是由实例内每个元素组成的一个数组