【ECMAScript6_3】正则、数值、函数、数组、对象、运算符

1、如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
ES5不允许第二个参数使用修饰符,

2、ES6将字符串中可以使用正则表达式的4个方法全部调用RegExp的实例方法。match()、replace()、search()和split()。
例如String.prototype.match 调用 RegExp.prototype[Symbol.match]

3、ES6增加了u修饰符,帮助识别一些编码。
ES6 还为正则表达式添加了y修饰符,叫做“粘连”(sticky)修饰符。y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。
不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。

4、具名组匹配:正则表达式使用圆括号进行组匹配。ES2018 引入了具名组匹配(Named Capture Groups),允许为每一个组匹配指定一个名字,既便于阅读代码,又便于引用。
“具名组匹配”在圆括号内部,模式的头部添加“问号 + 尖括号 + 组名”。有了具名组匹配以后,可以使用解构赋值直接从匹配结果上为变量赋值。

5、ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用。
Math.trunc方法用于去除一个数的小数部分,返回整数部分。
Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
Math.cbrt()方法用于计算一个数的立方根。
Math.imul方法返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。
ath.clz32()方法将参数转为 32 位无符号整数的形式,然后返回这个 32 位值里面有多少个前导 0。
Math.fround方法返回一个数的32位单精度浮点数形式。
Math.hypot方法返回所有参数的平方和的平方根。
还包括对数方法、双曲函数方法。
ES2020 引入了一种新的数据类型 BigInt(大整数),为了与 Number 类型区别,BigInt 类型的数据必须添加后缀n。BigInt 与普通整数是两种值,它们之间并不相等。

6、ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。参数变量是默认声明的,所以不能用let或const再次声明。
有默认值的参数都不是尾参数。这时,无法只省略该参数,而不省略它后面的参数,除非显式输入undefined。
指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数。
利用参数默认值,可以指定某一个参数不得省略,如果省略就抛出一个错误。省略时会是默认值,将默认值置为返回一个异常。

7、ES6 引入 rest 参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

8、箭头函数 :ES6 允许使用“箭头”(=>)定义函数。如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
箭头函数没有自己的this对象,不可以当作构造函数,也就是说,不可以对箭头函数使用new命令,不可以使用arguments对象,该对象在函数体内不存在,不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
箭头函数不适用场合:第一个场合是定义对象的方法,且该方法内部包括this。第二个场合是需要动态this的时候,也不应使用箭头函数。(箭头函数里的this是全局对象)

9、尾调用优化:尾调用(Tail Call)是函数式编程的一个重要概念,就是指某个函数的最后一步是调用另一个函数。
“尾调用优化”(Tail call optimization),即只保留内层函数的调用帧。可以节省内存。
类似,还有尾递归、尾逗号。

10、toString方法可以返回注释,catch命令可以不带参数。

11、扩展运算符(…)可以展开数组,由于扩展运算符可以展开数组,所以不再需要apply()方法将数组转为函数的参数了。

// ES5 的写法
Math.max.apply(null, [14, 3, 77])
// ES6 的写法
Math.max(...[14, 3, 77])
// 等同于
Math.max(14, 3, 77);

扩展运算符还可以复制数组、合并数组、与解构赋值结合、将字符串转为数组、实现了Iterator接口的对象

12、数组方法:
Array.from()方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。
Array.of()方法用于将一组值,转换为数组。这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。
数组实例的copyWithin()方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。
实例方法:find(),findIndex(),findLast(),findLastIndex()
fill方法使用给定值,填充一个数组。ES6 提供三个新的方法——entries(),keys()和values()——用于遍历数组。
Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。
Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。参数代表要拉平几层嵌套数组。
at()方法,接受一个整数作为参数,返回对应位置的成员,并支持负索引。这个方法不仅可用于数组,也可用于字符串和类型数组(TypedArray)。
toReversed(),toSorted(),toSpliced(),with() 允许对数组进行操作时,不改变原数组,而返回一个原数组的拷贝。
group()的分组函数可以接受三个参数,依次是数组的当前成员、该成员的位置序号、原数组(上例是num、index和array)。分组函数的返回值应该是字符串(或者可以自动转为字符串),以作为分组后的组名。
groupToMap()的作用和用法与group()完全一致,唯一的区别是返回值是一个 Map 结构,而不是对象。

13、ES6允许用字面量定义对象时,使用表达式作为对象的属性名,但是要将表达式放在方括号中。对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。
Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。
描述对象的enumerable属性,称为“可枚举性”,如果该属性为false,就表示某些操作会忽略当前属性。

14、属性的遍历
ES6 一共有 5 种方法可以遍历对象的属性。
(1)for…in
for…in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。
(2)Object.keys(obj)
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。
(3)Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。
(4)Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。
(5)Reflect.ownKeys(obj)
Reflect.ownKeys返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。
以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。
首先遍历所有数值键,按照数值升序排列。
其次遍历所有字符串键,按照加入时间升序排列。
最后遍历所有 Symbol 键,按照加入时间升序排列。
ES6对象新增方法:
Object.is()它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
Object.assign()方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。实行浅拷贝。这种嵌套的对象,一旦遇到同名属性,Object.assign()的处理方法是替换,而不是添加。
Object.setPrototypeOf()(写操作)、Object.getPrototypeOf()(读操作)、Object.create()(生成操作)。

15、运算符
ES2016 新增了一个指数运算符(**)。这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的。
链判断运算符(?.)编程实务中,如果读取对象内部的某个属性,往往需要判断一下,属性的上层对象是否存在。链判断运算符简化了 写法。短路机制
读取对象属性的时候,如果某个属性的值是null或undefined,有时候需要为它们指定默认值。常见做法是通过||运算符指定默认值。
ES2020 引入了一个新的 Null 判断运算符??。它的行为类似||,但是只有运算符左侧的值为null或undefined时,才会返回右侧的值。
逻辑赋值运算符:这三个运算符||=、&&=、??=相当于先进行逻辑运算,然后根据运算结果,再视情况进行赋值运算。

你可能感兴趣的:(ECMAScript6,es6,前端,ecmascript)