目录
前言
一、ES是什么?
ES是ECMAsrcipt的缩写,ES是标准,javascript是实现,目前只有js实现了es的标准,所以js约等于es
类似html5也是标准,chrome、ie10是实现。
二、ES6语法
1.let和const
之前var的缺点:
(1)可以重复声明;var a=20;var a=30;不会出错。
(2)var无法限制修改;
(3)var没有块级作用域。{},if(){},for(){}块里面定义的var在外面也可以使用,只有在function中定义的外面不能使用。
let主要解决的问题:
(1)增加块级作用域;
(2)let不存在变量提升;(var生命的变量在编译时都会提升到代码的最开始)
(3)let不允许重复声明。
const:
(1)const定义的是常量,声明后无法修改,所以在刚开始必须有初始值。
(2)const如果生命对象或者数组,生命的常量在对内容中保存内容,栈内存中存储的是指向堆内存的引用;堆内存的内容可以修改,但栈内存存储的引用不能修改,既不能将此对象重新赋值给新的对象。
2.箭头函数
原先使用函数:
//函数也是一种变量。
const fun = function(x) {return x *x;}
console.log(fun(1));
箭头函数:
const fun = (x)=> {return x *x};将functon换为了箭头放在参数和函数体中间。
tips:(1)如果没有参数,或有多个参数,用小括号定义参数列表;
(2)如果有一个参数,可以不用();
(3)如果函数体中只有一条语句,可以将大括号以及return去掉。
(4)箭头函数没有构造器,如果要new一个函数对象,使用function定义,箭头函数会出错。
this指向问题:
(1)普通函数的this对象指向调用者,如果没有调用者是指window对象;
(2)箭头函数没有自己的this,他的this对象是继承来的,默认指向在定义它时所处的对象(宿主对象)。
箭头函数的主要适用场合:
(1)回调函数(一个函数是另外一个函数的参数时);
(2)this用继承过来的时候。
3.数组中新增的高级函数
1.fitler,数组调用filter时,filter传入回调函数,数组的每一个值传入一次调用一次函数,当函数返回true时,将此数值加入到新的数组中。
2.map,同filter的用法差不多,也是每个值调用一次回调函数,返回操作的值。
3.reduce,传入一个回调函数和一个数值,回调函数有两个参数,分别是s,n,reduce函数传入的另外一个参数就是s的初始值,n时数组中每次传入的数值,每次调用回调函数s是上一次调用的返回值。此函数用于做求和等计算时比较方便。
let sum=arr.reduce((s,n)=>s+n,0);
4.set、map
1.set:add、delete、has、size、clear等方法,set中元素不能重复,set中的元素可以是不同的数据类型。
2.map:set添加元素,需要指定键值对,get获取元素
5.字符串新增高级函数
startsWith()、endsWith()
6.解构赋值
let [a,b,c] = [1,2,3];
这个语句表示将数组中的123分别赋值给变量a,b,c。
接收的可以少于实际的,按顺序赋值即可。
对象使用解构赋值时接受的变量名必须与实际对象的键的名字相同
7.三点运算符
(1)用于合并数组,
let arr1=[1,2,3];
let arr2 =[4,5,6];
let arr3=[…arr1,4,5,6,…arr2];
(2)一个函数调用数组中的所有元素时也可以用此运算符。
8.新增了class、extends关键字
9.json对象的新应用
(1)属性和值名字一样可以简写为一个;
(2)方法一样可以简写
(3)串行化:JSON.stringify();
反串行化:JSON.parse();
10.模块化编程module
优点:1.减少命名冲突;
2.避免引用时的层层依赖‘;
3.可以提升执行效率,可以导入导出部分页面而不是全部。
export命令:一个模块就是一个独立的文件,文件内部的变量方法等,外部无法获取,使用export导出本模块内的变量方法,一般以json的形式导出,一般也会用到解构赋值的方法。
可以单独导出,也可以最后一起导出 *,每个文件可以有一个缺省导出default,还可以用as起别名。
import命令:此命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块的对外接口的名称相同。