集合引用类型
Object
显式创建Object实例的两种方法
- 使用new操作符和Object构造函数
- 使用对象字面量(使用对象字面量时,并不会实际调用Object构造函数)
对象属性的存取方法
-
点语法(通常点语法是首选)
-
中括号(在使用中括号时,要使用属性名的字符串形式)
-
中括号的优势
- 可以通过变量访问属性
- 如果属性名中包含可能导致语法错误的字符,可以使用中括号
-
Array(ECMAScript的数组是动态大小的)
创建数组的四种方法
-
使用Array构造函数
- 如果知道数组中元素的个数,可以给构造函数传入一个数值,这样length就会被自动创建并设置为这个值
- 可以给构造函数传入要保存的数值
-
数组字面量
- 使用数组字面量创建数组不会调用Array构造函数
-
Array构造函数还有两个ES6新增的用于创建数组的静态方法
-
Array.from()(用于将类数组结构转换为数组)
-
类数组
- 任何可迭代结构
- 有一个length属性和可索引元素的结构
-
-
Array.of()(用于将一组参数转换为数组)
-
数组空位 (hole)
-
使用数组字面量创建数组时,可以使用一串逗号来创建空位 (hole),在ES6新增的方法中,这些空位被当成存在的元素,其值为undefined。在ES6之前的方法中,这些空位会被忽略。
- 需要避免使用数组空位,如果必须使用,可以显式的用undefined代替。
数组索引
- 如果要赋值的索引超过了数组最大索引,那么数组的长度会自动扩展到该索引值加1
- 数组的length属性是可以被修改的,我们可以通过修改length的值在数组末尾删除或添加元素。
- 数组最多可以包含4294967295个元素。
检测数组
- 如果只有一个网页(说明只有一个全局作用域),使用instaceof
- 如果网页中有多个框架(有多个全局作用域),使用Array.isArray()。
复制和填充方法
-
copyWithin(),批量复制方法
- copyWithin(),可以接受三个参数,1.插入索引,2.开始复制的索引(包含开始索引),3.结束复制的索引。(不包含结束索引)
-
fill(),填充数组方法
- fill(),可以接受三个参数,1.填充值,2.可选的开始索引(包含开始索引),3.可选的结束索引。(不包含结束索引)
转换方法
-
toString()
- 返回由数组中每个值的等效字符串拼接而成的一个逗号分隔的字符串(实际上是数组的每一项都调用了toString()方法,以得到最终的字符串)
-
valueOf()
- 返回的还是数组本身
-
toLocaleString()
- 会得到一个逗号分割的数组值的字符串
栈方法
- push(),接受任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度。
- pop(),用于删除数组的最后一项,同时减少数组的length值,返回被删除的项。
队列方法
- shift(),删除数组的第一项并返回它,数组的长度减一。
- unshift(),在数组开头添加任意多个值,并返回新的数组长度。
排序方法
-
reverse(),将数组元素反向排列。
- 会修改原数组
-
sort(),默认情况下,sort()会将数组元素升序排列且数组元素是按照字母序排列。(是因为会对数组每一个元素都调用转型函数String(),再比较字符串排序)
-
sort(),可以接受一个比较函数
- 会修改原数组
-
操作方法
-
concat(),首先会创建一个当前数组的副本,然后把参数添加到副本的末尾,最后返回新数组。
-
slice(),用于创建一个包含原数组中一个或多个元素的新数组。(不影响原数组)
-
slice(),可以接受一个或两个参数
- 如果只有一个参数,则slice()会返回从该索引到数组末尾的所有元素。
- 如果有两个参数,silce()会返回从开始索引到结束索引对应的所有元素,不包含结束索引。
-
-
splice()(影响原数组)
-
删除
- 需要给splice()传入两个参数,要删除的第一个元素的位置和要删除的元素的数量。(将删除的元素组成的数组返回)
-
插入
- 需要给splice()传入三个参数,开始位置,0和要插入的元素。
-
替换
- 需要给splice()传入三个参数,开始位置,要删除的元素个数和要插入的任意多个元素。(删除元素数可以和插入元素数不同)(返回删除的元素组成的数组)
-
搜索和位置方法
-
严格相等
-
indexOf()
-
接受两个参数,要查找的元素和一个可选的起始搜索位置。(从数组头开始搜索)
- 返回要查找的元素在数组中第一次出现的下标。
-
-
lastIndexOf()
-
接受两个参数,要查找的元素和一个可选的起始搜索位置。(从数组尾开始搜索)
- 返回要查找的元素在数组中第一次出现的下标。
-
-
includes()(ES7新增)
-
接受两个参数,要查找的元素和一个可选的起始搜索位置。(从数组头开始搜索)
- 返回布尔值。
-
-
-
断言函数
- find(),从数组的最小索引开始,返回第一个匹配的元素。(使用了断言函数)
- findIndex(),从数组的最小索引开始,返回第一个匹配元素的下标。(使用了断言函数)
迭代方法(不影响原数组)
-
ECMAScript为数组定义了5个迭代方法,每个方法接受两个参数,1.以数组每一项为参数的函数(这个函数接受三个参数,数组元素、元素索引和数组本身)2.以及可选的作为函数运行上下文的作用于对象(会影响函数中this的值)
- every(),对数组每一项都运行传入的函数,如果对每一项函数都返回true,则这个方法返回true。
- filter(),对数组的每一项都运行传入的函数,函数返回true的项会组成数组之后返回。(不影响原数组)
- forEach(),对数组的每一项都运行传入的函数,没有返回值。
- map(),对数组的每一项都运行传入的函数,返回由每次函数调用结果构成的数组。(不影响原数组)
- some(),对数组的每一项都运行传入的函数,如果有一项函数返回true,则这个方法返回true。
归并方法
-
reduce(),从数组的第一项遍历到最后一项。
- 接受两个参数,1.每一项都会运行的归并函数(传入的函数接受四个参数,上一个归并值、当前项、当前项的索引、数组本身),2.可选的作为归并起点的初始值。(如果没有指定归并起点,那么第一次迭代会在数组第二项开始。)
-
reduceRight(),从数组的最后一项遍历到第一项。
- 和reduce()相同。
map(ES6新增)
基本API
-
创建空映射
-
let map = new Map()
- 给Map()构造函数传入一个可迭代对象可以在创建的同时初始化实例。
-
-
使用set()方法添加键值对
-
使用delete()方法删除指定键值对,返回一个布尔值,表示哈希表中是否存在要删除的键值对
-
使用clear()方法清空哈希表
-
使用get()获取指定键对应的值
-
使用has()判断指定键是否存在,返回布尔值
-
使用size属性可以返回哈希表中键值对的数量
Map会维护插入键值对的顺序
map和Object的区别,Object的键只能用字符串(String类型)或数值(Number类型)
- 给定固定大小的内存,map可以储存更多的键值对。
- map的插入性能更优,如果有大量插入键值对的操作,选择map更好。
- 如果涉及大量查找操作,选择Object更好。
- 如果涉及大量删除操作,使用map更好。
Set(ES6新增)
基本API
-
const s = new Set()
- 如果想在创建的同时初始化实例,可以为Set()构造函数传入一个可迭代对象。
-
可以使用add()增加值
-
可以通过delete()删除指定值,返回一个布尔值,表示集合中是否存在要删除的值
-
可以通过clear()清空集合
-
可以通过size属性获取集合中值的数量
-
可以使用has()查询指定值是否存在,返回布尔值
Set会维护插入值的顺序
XMind: ZEN - Trial Version