ES6和ES5的区别
- ECMAScript5,即ES5,是ECMAScript的第五次修订,在2009年完成标准化;
- ECMAScript6,即ES6,是ECMAScript的第六次修订,在2015年完成标准化,也称为ES2015;
- ES6是ES5之后的一次改进,相对于ES5更加简洁,提高了开发效率,但是可能有些低版本的浏览器会出现不兼容的现象。
ES6新增的方法
- 新增声明命令let和const
在ES6中通常使用let 和const来声明,let表示变量,const表示常量
- let和const都属于块级作用域,以花括号({})代码块为作用域范围,只能在代码块里面使用,不存在变量提升,只能先声明再使用,否则会undefined报错,在代码块内,在声明变量之前该变量都是不可用的,这种情况在语法上称之为‘暂时性死区’,并且同一个代码块内,不允许重新声明。
- const声明的是一个常量,在声明的时候就需要赋值。(但是如果const声明的是一个对象,对象所包含的值是可以被修改的,复杂点说,就是对象所指的地址不能变,而变量成员是可以修改的)
- 模板字符串(Template String)
用一对反引号(``)标识,他可以当做普通字符串使用,也可以用来定义多行字符串,还可以在字符串中嵌入变量,js表达式或函数、变量需要写在${}中。
`<div style='width:100%;height:300px;overflow-y:scroll;overflow-x:hidden;'>${errDiyPriceMSg}</div>`
- 函数的扩展
- 函数的默认参数
ES6为参数提供了一个默认值。在定义函数时变初始化了这个参数,以便在参数没有传递进去的时候使用。
- 箭头函数
在ES6中,提供了一种简洁的函数写法,就是“箭头函数”。
函数名=(参数)={ } 当函数体内只有一个表达式时,{}和return可以省略,当函数体重形参只有一个时,()也可以省略
箭头函数中的this指向,始终指向箭头函数定义时离this最近的一个函数,如果没有最近函数,那就是指向window。
let index = this.importData.findIndex(t=>t.IdcardNum == x.IdcardNum);
- 对象的扩展
- 对象属性的简写
在ES6中当变量名和属性名一样时,写对象时可以不为属性赋值;
var sunday = 'kobe'
var obj = {sunday} // 等同于var obj = {sunday:sunday}
var fun = {
method(){
return "你好!Kobe"
}
} //等同于 var fun = {
method:function(){
return "你好!Kobe"
}
}
- Object.keys()方法
获取对象的所有属性名或方法名(不包含原型内容),并返回一个数组。
var obj = {name:'sunday',age:"18",getBasketball(){console.log('我是你的篮球!') }};
console.log(Object.keys(obj)) // ["name","age","getBasketball"]
console.log(Object.keys(obj).length) // 3
console.log(Object.keys(["kobe","anser","利拉德"])) // ["0","1","2"] 打印出数组下标
console.log(Object.keys("kobe")) // ["0","1","2","3"] 打印出字符串下标
- Object.assign()
assign方法将多个源对象的属性和方法都合并到了目标对象上面,可以接受多个参数,第一个参数是目标对象,后面的都是源对象
var target = {}
var obj1 = {name:"kobe"}
var obj2 = {age:"42"}
var obj3 = {sex:"男"}
var obj4 = {age:"43"}
Object.assign(target,obj1,obj2,obj3,obj4);
console.log(target) // {name:"kobe",age:"43",sex:"男"} 同名属性值会被最后一个替换掉
- for ... of 循环
for...of 更多用于特定于集合(如数组和对象),但不包括所有对象。
var arr = ["1","2","3"]
for ( var item of arr){
console.log(item)
}
// 1,2,3
- Promise (这个打算单独拎出来再仔细写一下,这里给大家简单描述一下)
promise是一步编程的一种解决方案,将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数,也就是回调地狱。
promise有3种状态,Reject 为失败的状态,Pending是在请求中吧,也属于初始状态,Fulfilled为成功状态。
- Set数据结构
Set数据结构类似于数组,所有的数据都是唯一的,它本身是一个构造函数。常用的场景就是利用Set去数组去重。
let arr = [12,43,23,43,68,12];
let item = new Set(arr);
console.log(item);//结果输出的是一个对象
//使用Array.from转成数组
let arr = [12,43,23,43,68,12];
let item = Array.from(new Set(arr));
console.log(item);// [12, 43, 23, 68]
- async和await
使用 async/await, 搭配 Promise,可以通过编写形似同步的代码来处理异步流程, 提高代码 的简洁性和可读性 async 用于申明一个 function 是异步的,而 await 用于等待一个异步 方 法执行完成
其实还有一些新增的方法,我就没有一一列举了(class 、Symbol、修饰器等)