这是我参与「第四届青训营 」笔记创作活动的第9天
函数的扩展
- 可以接受为函数的参数指定默认值。
- 可以和解构赋值结合使用。
- 指定默认值以后,函数的length属性将显示制定了默认参数的个数,length属性将失真。
rest参数
形式为
...变量名
用于获取函数的多于参数。
严格模式
只要函数参数使用了默认值,解构赋值或者扩展运算符,那么函数内部则不能显式设定为严格模式。
箭头函数
=>
允许使用箭头定义函数
var f = v => v;
// 等同于
var f = function (v) {
return v;
};
如果箭头函数不需要参数或者需要多个参数,就用一个圆括号代表参数部分。
var f = () => 5;
// 等同于
var f = function () { return 5 };
如果多于一条语句则用大括号括起来,并且使用return语句返回。
箭头函数没有自己的this对象
ES6中使用尾递归就不会发生栈溢出
最后一个参数后面允许使用逗号
try catch的catch之后可以不跟参数。
数组的扩展
扩展运算符
由三个点 ... 表示。 可以用来复制数组,合并数组(浅拷贝) 还可以将字符串转换为数组。
Array.from()
可以将类似数组的对象或者是可遍历的对象转换为数组。
copyWithin()
在当前数组内部,将指定位置的成员复制到其他位置(覆盖)。
find(),findIndex(), findLast(), findLastIndex()
fill()
填充一个数组
entries(),keys(),values()
这三个都是返回一个Iterator,可以用for of 遍历,keys是对键名的遍历,value是对值,entries是对键值对的遍历。
includes()
flat(), flatMap()
flat将一个数组拉平,变成一维的数组,flatMap对原数组的每个数字执行一个番薯,并对返回值进行flat拉平。
at()
可以用负索引来查找数据
toReversed(), toSorted(), toSpliced(), with()
在对数组操作时,不改变原有的数组,而返回一个数组的拷贝。
group(), groupToMap()
将数组按照一定的条件进行分类。后者返回的是一个Map对象。
super
super可以指向当前对象的原型对象,但是只能用在对象的方法中。
const proto = {
foo: 'hello'
};
const obj = {
foo: 'world',
find() {
return super.foo;
}
};
Object.setPrototypeOf(obj, proto);
obj.find() // "hello"
Object.assign()
可以用于对象的合并。是浅拷贝,丙炔吐过由同名属性会进行覆盖。
运算符的扩展
指数运算符:** 链判断运算符: ?.
const firstName = message?.body?.user?.firstName || 'default';
const fooValue = myForm.querySelector('input[name=foo]')?.value
Null判断运算符:?? 类似于||,但只有在左侧的值为null或者undefined的时候才会返回右侧的值