ES6有哪些新特性

 1.新增了let和const两个块级作用域;和var一样都是定义变量的关键字,var是es5里面的;let和const是es6里面的;
        区别:let声明的变量不可以自动提升;var声明的可以自动提升;let不允许在相同作用域里,重复声明一个变量,var可以;
        let允许块级作用域的任意嵌套,外层无法读取内层作用域的变量,var可以;let声明的作用域只在当前代码块的{}内有效,let可以解决for循环i全局变量污染的问题;
        const声明的是一个只可以读的常量。只要声明,常量的值就不可以改变。他和let一样const也是一个块级作用域,无法变量提升,重复声明
2.新增了箭头函数
        箭头函数和普通函数的不同:他们的写法不同;this指向不同:箭头函数指向的是定义时的对象,普通函数是指向调用它的对象;
        箭头函数不可以当作构造函数,就是不可以使用new命令,否则报错;箭头函数没有arguments对象,得到的是外层函数的参数;
        
        总结:箭头函数,最开始就是为了解决this指向问题,箭头函数里面的this是定义的时候确定的,this一旦确定无法改变,箭头函数最好的就是简洁;
        同时箭头函数一定是匿名函数,箭头函数适合于没有复杂逻辑和无副作用的纯函数场景下,比如map,filter的回调函数中;
        最好不要在最外层定义箭头函数,因为在函数内部操作this会容易污染全局作用域。在箭头函数外部包一层普通函数,可以将this控制在可见范围内;
3.增加了解构赋值
4.模板字符串
        传统的输出模板特别繁琐,而且容易拼接错误
        ES6中的模板字符串是增强版的字符串,用反引号``,标识,它可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量;
        模板字符串里还可以2放入花括号,在花括号里边可以写入任意JS表达式,还可以引用对象属性。而且模板字符串还可以调用函数;
5.ES6还新增了Set和Map数据结构
        Set对象他类似于数组,且成员的值都是唯一的。他常见的方法有5种:add():添加某个值然后返回Set结构本身。size()返回Set实例的成员总数;
           delete()删除某个值,返回一个布尔值,表示是否删除成功;has()返回一个布尔值,表示该值是否为Set的成员。clear()清除所有成员,没有返回值;
           Set集合中的数据不允许有重复,可以做数组去重1.(...new set(arr))  2.arr.forEach(item => set.add(item));
        Map对象是键值对集合,和JSON对象类似,但是key不仅可以是字符串还可以是对象;
        Map常见的方法也有5种:map.set()可以获取对象的属性;get()可以获取对象的name属性;size()获取元素的存储数;has()可以知道指定元素是否
           存在;delete()可以删除指定属性
6.把for循环改为for of循环
        for in是es5的标准,用来遍历Key值,遍历对象和数组,for of是es6的标准,用来遍历value值,遍历数组,不能遍历普通对象;
        因为普通对象没有symbol属性,如果对象拥有symbol属性,就可以使用for of遍历;
        symbol是es6新增的一种基本数据类型,他是一个独一无二的数据类型,在es5中对象属性名字都是字符串容易造成属性名冲突,为了避免这种情况
        Es6就引入了symbol类型,Symbol值能够作为对象属性的标识符;
        使用for in会遍历数组所有的可枚举属性,包括原型,所以for in更适合遍历对象;
        for in遍历的是数组的索引,for of遍历的是数组的元素值
7.Es6新增了模块化
        在Es6之前是JavaScript是没有模块系统的,那么他就无法将一个大程序拆分成若干个互相依赖的小文件;如果需要进行模块化操作,就需要从第三方引入;
        在ES6中就提供了模块化,才让JavaScript第一次支持了module。ES6的模块化分为导出(export)和导入(import)两个模块;
        模块可以理解为和函数代码块一样的功能,是封装对象的属性和方法的JavaScript代码,他可以是某单个文件,变量或者函数
        而且引入模块和引入脚本是有区别的,前者更多的是按需引入加载,后者是无论使用还是不使用,全部一次性引入和加载,类似于通过script标签引入Jquery等,这些都是一次性引入的;
        导出:Es6模块导出分为默认导出和指定导出,默认导出的话可以用任意名字来接收,比如导出的是export default module1; 接收的时候可以 import x,
        如果要一次导出多个,需要用{}包裹,接收时必须与导出时同名 
        接收:接收用import {name,age} from './module.js'
        在导出中除了export关键字,每一个声明必须和脚本中的一样,因为导出的函数和声明需要有一个名称;
        导出数据,只需要在里边写上数据名就可以export {name,age} 导出函数只需要你定义好函数,然后把函数名导出就可以export sum;
8.    (...)扩展运算符:用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。
9.新增了Promise关键字

你可能感兴趣的:(前端,es6)