数组
数组中的方法
1. Array.of() 将参数中所有值作为元素形成数组。
数组中的参数可以是不同类型的,当参数为空时,返回空数组。
2. Array.from() 将类数组对象或可迭代对象转化为数组。
3. find() 查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素,找不到返回undefined。
let arr = Array.of(1, 2, 3, 4);
console.log(arr.find(item => item > 2)); // 3
// 数组空位处理为 undefined
console.log([, 1].find(n => true)); // undefined
value:每一次迭代查找的数组元素。
index:每一次迭代查找的数组元素索引。
arr:被查找的数组。
4. findIndex() 查找数组中符合条件的元素索引,若有多个符合条件的元素,则返回第一个元素索引,如果数组中的参数为空,将返回undefined(未定义)。
let arr = Array.of(1, 2, 1, 3);
// 参数1:回调函数
// 参数2(可选):指定回调函数中的 this 值
console.log(arr.findIndex(item => item = 1)); // 0
// 数组空位处理为 undefined
console.log([, 1].findIndex(n => true)); //0
find() , findIndex() 方法的参数:
- arrayLike 想要转换的类数组对象或可迭代对象。
- mapFn map 函数,用于对每个元素进行处理,放入数组的是处理后的元素。
- thisArg 用于指定 map 函数执行时的 this 对象。
5. fill(value, start, end) 将一定范围索引的数组元素内容填充为单个指定的值。
该方法的参数:
- value:想要替换的内容。
- start:开始位置(数组的下标),可以省略。
- end:替换结束位置(数组的下标),如果省略不写就默认为数组结束。
6. copyWithin() 将一定范围索引的数组元素修改为此数组另一指定范围索引的元素。
该方法的参数:
-
参数1:被修改的起始索引
-
参数2:被用来覆盖的数据的起始索引
-
参数3(可选):被用来覆盖的数据的结束索引,默认为数组末尾
7. entries() 用于遍历键值对。
8. includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
9. flat() 对数组的维数转换。
当参数为Infinity时,不管嵌套了多少层,都将转换为一层。
10. flatMap() 先对数组中每个元素进行了的处理,再对数组执行 flat() 方法。
console.log([1, 2, 3].flatMap(n => [n * 2])); // [2, 4, 6]
参数1:遍历函数,该遍历函数可接受3个参数:当前元素、当前元素索引、原数组
参数2:指定遍历函数中 this 的指向
函数
1. 函数的基本用法
注意:
- 使用函数默认参数时,不允许有同名参数
- 只有在未传递参数,或者参数为 undefined 时,才会使用默认参数,null 值被认为是有效的值传递。
- 函数参数默认值存在暂时性死区,在函数参数默认值表达式中,还未初始化赋值的参数值无法作为其他参数的默认值。
2. 不定参数(…)
function a(...values){
console.log(values.length);
}
a(1,2); //2
a(1,2,3,4); //4
不定参数用来表示不确定参数个数,指定多个各自独立的参数,通过整合后的数组来访问,最多只能声明一个,而且必须放在参数末尾。
3. 箭头函数
基本用法:
参数 => 函数体 | |
---|---|
var f = v => v;//等价于var f = function(a){return a;}f(1); //1 |
注意:
- 当箭头函数没有参数或者有多个参数,要用 () 括起来。
- 当箭头函数函数体有多行语句,用 {} 包裹起来,表示代码块,当只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回。
- 当箭头函数要返回对象的时候,为了区分于代码块,要用 () 将对象包裹起来。
- 没有 this、super、arguments 和 new.target 绑定。
- 箭头函数体中的 this 对象,是定义函数时的对象,而不是使用函数时的对象。
- 不可以作为构造函数,也就是不能使用 new 命令,否则会报错。
- 当定义函数的方法中包含this时,不适合使用。
迭代器
1. Iterator的作用
- 为各种数据结构,提供一个统一的、简便的访问接口
- 使得数据结构的成员能够按某种次序排列
- ES6 创造了一种新的遍历命令for…of循环,Iterator 接口主要供for…of消费。
2. 迭代过程
-
通过 Symbol.iterator 创建一个迭代器,指向当前数据结构的起始位置
-
随后通过 next 方法进行向下迭代指向下一个位置, next 方法会返回当前位
-
置的对象,对象包含了 value 和 done 两个属性, value 是当前属性的值, done 用于判断是否遍历结束
-
当 done 为 true 时则遍历结束
示例:
const items = ["zero", "one", "two"];
const it = items[Symbol.iterator]();
it.next();
>{value: "zero", done: false}
it.next();
>{value: "one", done: false}
it.next();
>{value: "two", done: false}
it.next();
>{value: undefined, done: true}
3. 迭代的数据结构
- String,Array,Map,Set,TypedArray是所有内置的可迭代对象,这些原型对象都有一个[Symbol.iterator]方法。
注意:
- 普通对象时不可迭代,因为普通对象是由 object 创建的,不可迭代。