ES6学习:
- let 关键字 特性:
let 关键字用来声明变量,使用 let 声明的变量有几个特点:
1. 不允许重复声明;
2. 块级作用域(局部变量);
3. 不存在变量提升;
4. 不影响作用域链;
- const 关键字 特性:
const 关键字用来声明常量,const 声明有以下特点:
1. 声明必须赋初始值;
2. 标识符一般为大写(习惯);
3. 不允许重复声明;
4. 值不允许修改;
5. 块级作用域(局部变量);
3. 变量和对象的解构赋值
4. 模板字符串
模板字符串是增强版的字符串,用反引号(`)标识
特点:字符串中可以出现换行符,可以使用$(xxx)形式引用变量
应用场景:字符串与变量拼接的情况使用模板字符串
5.简化对象和函数写法
ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁;
6. 箭头函数
ES6允许使用箭头(=>)定义函数,箭头函数提供了一种更加简洁的函数书写方式,箭头函数多用于匿 名函数的定义;
箭头函数的注意点:
1. 如果形参只有一个,则小括号可以省略;
2. 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果; 3. 箭头函数 this 指向声明时所在作用域下 this 的值;
4. 箭头函数不能作为构造函数实例化;
5. 不能使用 arguments;
特性:
1. 箭头函数的this是静态的,始终指向函数声明时所在作用域下的this的值;
2. 不能作为构造实例化对象;
3. 不能使用 arguments 变量;
应用:
箭头函数不会改变this指向,用来指定与this无关的回调函数会非常合适,如定时器和数组的方法回调
7.ES6中函数参数的默认值
ES6允许给函数的参数赋初始值
8.rest参数
ES6引入rest参数,用于获取函数的实参,用来代替arguments
// ES6的rest参数...args,rest参数必须放在最后面
function data(...args){ console.log(args); // fliter some every map }
data("大哥","二哥","三哥","四哥")
9. 扩展运算符
... 扩展运算符能将数组转换为逗号分隔的参数序列; 扩展运算符(spread)也是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参 数序列,对数组进行解包;
应用1:合并数组:
ES5的 concat
ES6的扩展运算符
应用2:克隆数组
应用3:将伪数组转化为真正的数组
10,Symbol
ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript 语言的第七种数据类 型,是一种类似于字符串的数据类型;
(第八个是bigint ,ES11的新特性)
Symbol 特点:
1. Symbol 的值是唯一的,用来解决命名冲突的问题;
2. Symbol 值不能与其他数据进行运算;
3. Symbol 定义的对象属性不能使用for…in循环遍历 ,但是可以使用Reflect.ownKeys 来获取对象的 所有键名;
//创建symbol
let s2 = Symbol('尚硅谷');
let s3 = Symbol('尚硅谷');
console.log(s2==s3); // false
//Symbol.for 创建
let s4 = Symbol.for('尚硅谷');
let s5 = Symbol.for('尚硅谷');
console.log(s4==s5); // true
11.迭代器
概述: 遍历器(Iterator)就是一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数 据结构只要部署 Iterator 接口,就可以完成遍历操作;
特性: ES6 创造了一种新的遍历命令 for...of 循环,Iterator 接口主要供 for...of 消费; 原生具备 iterator 接口的数据(可用 for of 遍历): Array; Arguments; Set; Map; String; TypedArray; NodeList;
工作原理:
1. 创建一个指针对象,指向当前数据结构的起始位置;
2. 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员;
3. 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员;
4. 每调用 next 方法返回一个包含 value 和 done 属性的对象;
for in 循环保存的是键名,for of 保存的是键值。
12.生成器
13.promise
概述:
Promise 是 ES6 引入的异步编程的新解决方案。语法上 Promise 是一个构造函数,用来封装异步操作 并可以获取其成功或失败的结果;
1. Promise 构造函数: Promise (excutor) {};
2. Promise.prototype.then 方法;
3. Promise.prototype.catch 方法;
使用promise封装读取文件
const p = new Promise(function(resolve,data){
fs.readFile("resources/text.txt",(err,data)=>{
// 判断如果失败
if(err) reject(err);
// 如果成功
resolve(data);
});
});
p.then(
function(value){
console.log(value.toString()); },
function(reason){ console.log(reason); // 读取失败
})
14.set集合
概述: ES6 提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了 iterator 接口,所以可以使用『扩展运算符』和『for…of…』进行遍历,
集合的属性和方法:
1. size 返回集合的元素个数;
2. add 增加一个新元素,返回当前集合;
3. delete 删除元素,返回 boolean 值;
4. has 检测集合中是否包含某个元素,返回 boolean 值;
5. clear 清空集合,返回 undefined;
15.Map集合
ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类 型的值(包括对象)都可以当作键。Map 也实现了iterator 接口,所以可以使用『扩展运算符』和 『for…of…』进行遍历;
Map 的属性和方法:
1. size 返回 Map 的元素个数;
2. set 增加一个新元素,返回当前 Map;
3. get 返回键名对象的键值;
4. has 检测 Map 中是否包含某个元素,返回 boolean 值;
5. clear 清空集合,返回 undefined;
比较少见的:
16.Class类
像java实体类一样声明js类
17.数值扩展
增加一些数值相关的方法等
18.对象扩展
增加一些对象相关的方法
19.模块化
模块化,组件件
20.Babel对ES6模块代码转换
21.ES6模块化引入NPM包