ES6 语法
June 1, 2019
📒 var,let 和 const
📄 块级作用域
📄 不存在变量提升
📄 暂时性死区
📄 不可重复声明
📄 ES6 声明的变量不会挂在顶层对象
📄 const 命令注意点
let可以先声明稍后赋值;而const声明之后必须立马赋值,否则会报错const声明了简单的数据类型就不能更改了;声明了引用类型(数组,对象等),指针指向的地址不能更改,但是内部的数据可以更改的
📄 let 和 const 使用场景
- let使用场景:变量,用以代替var
- const使用场景:常量、声明匿名函数、箭头函数的时候。
📒 解构赋值
📄 数组
📄 对象
📄 字符串
📄 数值和布尔值
📒 字符串扩展
📒 数值扩展
📒 函数扩展
📄 rest 参数
- ES6 中引入了 rest 参数(形式为 …变量名),用于获取函数的多余参数,获取后的格式为一个数组。
📄 箭头函数
- 使用了箭头函数后,这个函数里面就没有自己的 this,里面所出现的 this 是外部函数的 this,而不是指向的 this,这种情况也称为 this 指向的固定化。
📄 双冒号运算符
- 改变 this 指向,即:双冒号左边的对象是右边函数中的 this。
📄 尾调用优化
- 尾调用:指某个函数的最后一步调用了一个函数,即:return y(x); 的严格格式。
- 尾调用优化:每一次函数调用都会在内存中形成一个“调用记录”,又称“调用帧”,保存调用位置和内部变量等信息,所有的调用帧称之为 调用栈,如果内部函数用到外部函数的变量,就不会进行尾调用优化。
- 尾递归:函数调用自身,称之为递归,尾调用自身,称之为尾递归。
📒 数组扩展
📄 数组扩展运算符
📄
📒 对象扩展
📄 属性名表达式
📄 对象的扩展运算符
📄 对象的新增方法
// 1.比较两个值是否相等 可比较特殊的字符
Object.is()
// 2.用于的对象的合并,将源对象的所有可枚举的属性复制到目标对象中,不拷贝继承迭代属性
// 若属性名相同,则后面对象的属性值会覆盖前面的属性值
Object.assign()
// 3.返回指定对象所有自身属性(非继承属性)的描述对象
Object.getOwnPropertyDescriptors()
// 4.创建一个新对象,并指定新对象的 __proto__ 指向
// 语法 Object.create(proto); 第一个参数为新对象的原型指向
Object.create()
// 5.设置指定对象的原型对象,并返回当前对象
// 语法:Object.setPrototypeOf(object,prototype);
Object.setPrototypeOf()
// 6.返回指定对象的原型对象
Object.getPrototypeOf()
// 7
// Object.keys(obj)
// 返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键名
Object.keys()
// Object.values()
// 返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的属性值
Object.values()
// Object.entries() 不支持IE
// 返回一个二维数组,每一个数组项是参数对象自身的(不含继承的)所有可遍历属性的键值对形成的数组,忽略 Symbol
Object.entries()
// 8. Object.fromEntries() 方法是 Object.entries() 的逆操作,
// 用于将一个键值对数组转换成一个键值对形式的对象
// 注:只兼容火狐浏览器
Object.fromEntries()
📒 Symbol
/*
1. Symbol 值通过 Symbol()函数生成
2. Symbol 函数可以接受一个字符串作为参数,表示对Symbol实例的描述
3. Symbol 可以显式转换成字符串,布尔值,但不能转换成数字
*/
let si = Symbol('foo')
console.log(si)// Symbol(foo)
/*用法?*/
let abc = Symbol('abc');
let obj = {
[abc]:'456',
'abc':'457',
}