es6和es5和js的关系

一.什么是es

es就是js的国际标准,语法标准。es6是es5升级的新一代标准,目前大部分浏览器已支持es6语法标准,ie7-11不支持。

二.es6的特点,与es5的区别

1.es6与es5的类不同,es6引入class,写起来更符合面向对象的编程思维,实际上底层实现的逻辑是一样的。但会极大的简化代码,看起来更加清晰。es6的类有暂时性死区,不可变量提升,因为es6的类必须声明之后才能使用。而es5中不是如此

另外继承类也不同,es6中继承的写法更符合java等面向对象的语言,使用extends关键字继承。而es5中继承写起来比较复杂,不够简洁。

补充点:

es6的类中必须有构造函数,构造函数中可以给予实例属性,另外还有原型方法。在es5中需这样实现:

var Animal=function(属性1,属性2){}
Animal.prototype = {method1:function(){},method2:function(){}}//原型方法
Animal.method3  = function(){}//静态方法

在es6中这样实现

class Animal = {
   constructor(){}
  method1(){}//原型方法
  method2(){}//原型方法
}

2.es6中有promise,以及同步异步async await,可将多层嵌套的回调函数 改为 链式执行,看起来清晰明白

3.增加let,const数据类型,在块级作用域中有效,即必须包含在大括号里,且不可变量提升,即必须声明之后再使用var声明的变量与函数声明会被提升到顶部,因此函数与var的变量可在声明之前使用

什么是块级作用域?就是在大括号里的就是块级作用域,{},比如for循环里。let非常适合for循环,for循环中使用var声明变量,容易受for之外的影响,而影响到数据的正确性。而在for中声明的let变量,只在for循环中有效,且每次for循环的let的变量都是一个新的变量 ,所以可保证数据不受其他影响

作用域:js中原来只有两种作用域,函数作用域和全局作用域, ES6中增加了块级作用域,适用于let和const

4.箭头函数,es6中函数不用写function关键字,用()=>{}就行。

es5中函数写法为

function a(){}

或者

 var a = function(){}

es6中可改为箭头写法

var a = (属性1,属性2)=>{代码块}   //若代码块中只有一行代码,则大括号{}可以省去

5.es6中可一次性取出数组或object的多个值

var student= {age:18,sex:'男',name:'name1'}
let {age,sex,name} = student

6.函数有默认参数的值,es5中无法设置默认值

function f(p1,p2,p3=false,p4='none'){}

7.模版字符串,用反引号标识、、,最主要可以加入变量或表达式,不用再一直用++++来连接字符串了

//模板字符串相当于加强版的字符串,用反引号 `,除了作为普通字符串,还可以在字符串中加入变量和表达式。 let info = `my name is ${name}`