ES6部分
前言
- ECMAScript5,即ES5,是ECMAScript的第五次修订,于2009年完成标准化
- ECMAScript6,即ES6,是ECMAScript的第六次修订,于2015年完成,也称ES2015
- ES6是继ES5之后的一次改进,相对于ES5更加简洁,提高了开发效率
1. let声明变量和const
1)var声明的变量会挂载在window上,而let和const声明的变量不会。
2)var声明变量存在变量提升,let和const不存在变量提升
3)let和const声明形成块作用域,作用域外访问不到
4)临时死区 与var不同,let和const声明的变量不会被提升到作用域顶部,如果在声明之前访问这些变量,会引发错误。而从作用域顶部到声明变量语句之前的这个区域,被称为临时死区(temporal dead zone),简称为TDZconst与let声明最大的不同之处在于,const声明的常量无法再赋值
const声明不允许修改绑定,但允许修改值。这也就意味着用const声明对象后,可以修改该对象的属性值
const person = { name: 'huochai' };//可以修改对象属性的值 person.name = 'match';
2.箭头函数
let func = (num) => num;
let func = () => num;
let sum = (num1,num2) => num1 + num2;
[1,2,3].map(x => x * x);
3.模板字符串
- 格式: `string text ${expression} string text`
let money = 100000000
let str = `今天我赚了 ${ monty } 元钱`
4.解构赋值
- ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值
var a, b, rest;
[a, b] = [10, 20];
[a, b, ...rest] = [10, 20, 30, 40, 50];
({ a, b } = { a: 10, b: 20 });
5.for of循环
JavaScript 原有的for...in循环,只能获得对象的键名,不能直接获取键值。ES6 提供for...of循环,允许遍历获得键值。
var arr = ['a', 'b', 'c', 'd'];
for (let a in arr)
{
console.log(a); // 0 1 2 3
}
for (let a of arr)
{
console.log(a); // a b c d
}
6.import、export导入导出
export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口
import用于在一个模块中加载另一个含有export接口的模块。// a.js
var sex="boy";
export {sex}// b.js
通过import获取a.js文件的内部变量,{}括号内的变量来自于a.js文件export出的变量标识符。
import {sex,echo} from "./a.js"
console.log(sex) // boy
7.set与map
set类似数组 只不过里面不能重复
方法:add(value),delete(value),has(value),clear()
数组去重:
let arr = [1,2,3,4,5,4,23,1,3];
arr= Array.from(new Set(arr)); // [1, 2, 3, 4, 5, 23]map类似对象,只不过键可以是任何形式 (如:对象)
方法:set(key, val),get(key),delete(key),clear()
var obj = {a:1}
var map = new Map([
[obj,2]
])
console.log(map.has(obj)); //true
console.log(map.get(obj)); //2
8.class
参考地址:https://www.cnblogs.com/linxiaoran/p/12061676.html
class Point{
constructor(x,y){
this.x = x;
this.y = y;
}
getPoint(){
return 'x:'+ this.x + ',y:' + this.y
}
}var poi = new Point(1,2);
console.log(poi.getPoint()) //x:1,y:2
9.promise
- promise实质是一个函数,通过这个函数创建一个promise对象
- 这个promise对象里存储一个状态,可以随着内部执行而转化,是三者之一的状态,分别为:
- 等待态/初始态(Pending)、完成态(Fulfilled)、拒绝态(Rejected)
- 当Promise启动后,
满足成功的条件时我们让状态从pending变成fulfilled(执行resolve)
满足失败的条件时我们让状态从pending变成rejected(执行reject)
var promise = new Promise(function(resolve,reject){
setTimeout(()=>{
// resolve(1)
reject(2);
},2000)
})
//里面连函数 分别对应 resolve reject
promise.then((res)=>{
console.log(res)
},(res)=>{
console.log(res)
})
//执行出错时
promise.catch((res)=>{
console.log(res)
})
10.async / awiat
- await 放置在Promise调用之前,await 强制后面点代码等待,直到Promise对象resolve,得到resolve的值作为await表达式的运算结果
- await只能在async函数内部使用,用在普通函数里就会报错
11. Symbol
- 特点:
每个从Symbol()返回的symbol值都是唯一的。
是一种基本数据类型- 创建语法:
Symbol([description]) //description:可选的,字符串类型。对symbol的描述,可用于调试但不是访问symbol本身。- 例如:
var S = Symbol( ); //注意 不支持new Symbol( );
或者
var S = Symbol('foo');