关于ES6的重点罗列(阮一峰ES6笔记总结)

变量

ES5只有两种声明变量的方法:varfunction命令;ES6中有六种:除了ES5的两种加上letconst还有importclass命令。

新增let

用于声明变量
块级作用域
不存在变量提升
暂时性死区
同一作用于内,不允许重复声明

新增const

声明只读常量
必须在初始化的时候赋值
块级作用域
没有变量提升,存在暂时性死区
生命的常量不可重复声明
对于符合类型的前两;变量名只是保证指向地址不变

变量解构赋值

模式匹配
不完全解构
var、let、const声明的变量都适用
允许指定默认值
解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量(真正被赋值的是后者)
解构赋值的变量都会重新声明;let和const中应该注意
解构可以用于嵌套结构的对象
字符串也可以解构赋值
数值和布尔值的解构赋值
解构赋值的规则是,只要等号右边的值不是对象,就先将其转为对象

字符串

字符串可以被for...of循环遍历
includes(), startsWith(), endsWith()

includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
三个方法都支持第二个参数,表示开始搜索的位置

repeat()

返回一个新字符串,表示将原字符串重复n次
参数如果是小数,会被取整
参数是负数或者Infinity,会报错(参数是0到-1之间的小数,则等同于0;先取整)

padStart(),padEnd()

字符串补全

模板字符串

用反引号(`)标识
模板字符串中嵌入变量,需要将变量名写在${}之中
模板字符串之中能调用函数
模板字符串能嵌套

数值

Number.isFinite(), Number.isNaN()

Number.isFinite()判断是否为小数
Number.isNaN()片段是否为空
只对数值有用;非数值都返回false

Number.isInteger()

判断是否为整数

安全整数和Number.isSafeInteger()

JavaScript能够准确表示的整数范围在-253到253之间(不含两个端点),超过范围,无法精确表示
Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER两个常量,来表示这个范围的上下限

数组

Array.from()

将类数组对象转化成正真的数组

// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']

Array.from可以接受第二个参数。作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

Array.of()

Array.of方法用于将一组值,转换为数组
弥补数组构造函数Array()的不足,参数个数的不同,会导致Array()的行为有差异

//只有当参数个数不少于2个时,Array()才会返回由参数组成的新数组
Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]

Array.of() // []
Array.of(undefined) // [undefined]
Array.of(1) // [1]
Array.of(1, 2) // [1, 2]
copyWithin()

将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组
Array.prototype.copyWithin(target, start = 0, end = this.length)

find()和findIndex()

用于找出第一个符合条件的数组成员,它的参数是一个回调函数
回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组

fill()

使用给定值,填充一个数组
fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置

entries(),keys()和values()

用于遍历数组,它们都返回一个遍历器
keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历

includes()

Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似

数组的空位

ES6则是明确将数组空位转为undefined

函数

函数参数的默认值

与解构赋值默认值结合使用
非尾部的参数设置默认值,实际上这个参数是没法省略的;可写作undefined

函数的length属性

回没有指定默认值的参数个数

函数参数的作用域

参数默认值是一个变量,则该变量所处的作用域,与其他变量的作用域规则是一样的,即先是当前函数的作用域,然后才是全局作用域

rest参数

用于获取函数的多余参数

扩展运算符

扩展运算符(spread)是三个点(…)
合并数组[1, 2, ...more]
与解构赋值结合
函数的返回值
字符串转化成数组[...'hello'] [ "h", "e", "l", "l", "o" ]
实现了Iterator接口的对象

name属性

函数的name属性,返回该函数的函数名
Function构造函数返回的函数实例,name属性的值为“anonymous

箭头函数

使用“箭头”(=>)定义函数
函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象
不可以当作构造函数,也就是说,不可以使用new命令
不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替
不可以使用yield命令,因此箭头函数不能用作Generator函数
this对象的指向是可变的,但是在箭头函数中,它是固定的

尾调用优化

尾调用是指某个函数的最后一步是调用另一个函数
尾调用不一定出现在函数尾部,只要是最后一步操作即可

尾递归

函数调用自身,称为递归。如果尾调用自身,就称为尾递归

非常建议对阮一峰老师的ES6入门进行阅读;会有跟进一步对ES6的新特性的理解。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注