JS ES6的变化之函数和运算符 | 青训营笔记

97 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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的时候才会返回右侧的值