es6 是为了框架服务的;
也叫es2015,2015年发布的
推荐书;es6标准入门
1.变量声明:
在es5中var,有缺点;可不声明,也可重复声明;还可以提升;
var不是那么的严格;
es6语法: let a=5
**let只在块级作用域里有效;
**let不允许重复声明;
let a=1
let a=2
这种不行;
**let没有变量提升;
console.lpg(a)
let a=1;
这种也报错,变量不能提升;
** 暂时性死区;let声明的变量会暂时绑定当前块级作用域;
let声明的那个变量,在块内只能用它的,外面有其他的声明也不能用;
{
}
举例:解决了for循环中i的问题:
var a=[]
for (var i=0;i<10;i++) {
a[i]=function(){
console.log(i);
}
}
a4 ——————这时的结果不论如何,都是10,因为的i之前没调用都没执行,但是i一直在加,最后到10,等你调用时,无论任何数值,i都已经到了10;
但是用let就可以解决这个问题:
var a=[]
for ( let i=0;i<10;i++) {
a[i]=function(){
console.log(i);
}
}
第二节:
在框架里推荐用let 声明,但是在jq中不要用;
只有在框架中可以兼容;
const是一个声明常量,不允许更改;
const a=5;
1)变量的解构赋值
之前声明多个变量有些麻烦;es6有简单的方案;
let [a,b,c]=[1,2,3], 注意是中括号,左边是一个变量数组,右边是数据数组;
等号右边的数据会对应的赋值给等号左边的变量;
2) 对象的解构赋值
let obj={name:“小明”,age:18},hobby:{sport:“basketball”,movie:“少年的你”};
var age=obj.age; // let {age} =obj;
let {name}=obj;
等号左边是变量名, 会被赋值等号右边对象对应的属性;
3)字符串的扩展
模版字符串:‘ ’
支持html解构换行;
支持在“字符串”中直接写变量;要求变量写在${变量} 这种形式;
4)数组的扩展 …
可以把数组和类数组结构拆分为参数序列;
举例:
var are=[1,5]
function add(m,n){
return m+n
}
console.log(add(…arr))
5)函数的扩展(重点)
支持默认参数;在形参里直接赋值,
function log(x,y=“world”){
console.log(x,y)
}
2)箭头函数
var fn=function(m){return m};
箭头函数:var fn=m=>m;
语法: var 函数名=(参数)=>{干什么事儿} 这是最完整的写法;
箭头函数简写:
1)如果只有一个参数,小括号可以省略,如果没有参数或多个参数,都不能省略;
2)如果箭头函数要返回一个值,那么return 和大括号可以一起省略;
3)如果返回的是一个对象的话,要给对象加小括号;
3.箭头函数中的this是绑定的,指向的是函数定义时所在的对象;
**this只可能指向调用的,或者是定义的,也就是生它的;
**箭头函数里的this是永远不变的;所以不能用做构造函数使用;
不能new;
举例:
function Timer(){
this.s1=0;
this.s2=0;
setInterval(()=>(this.s1++),1000)
setInverval(function(){this.s2++},1000)
}
var timer=new Timer();
setTImeout=(()=>{console.log(‘s1’,timer.s1)},3000)
setTImeout=(()=>{console.log(‘s2’,timer.s2)},3000)
s1 打印结果 3
s2 打印结果0
第三节
1.call apply函数
语法:
function.apply(obj,argsArr) 用obj这个对象去改了之前的对象
call也是完全一样的
function.call(obj,1,2,3) 第二个是参数列表
math.max.apply(null,[1,2,3,5])
math的最大值可以加数组;
2.Set:一种新的数据结构,类似于数组;
区别:数组的值是可以重复的,但是set是唯一的;
创建方式:可以是构造函数去创建数据结构;
var set=new Set([1,2,3,4,5])
console.log(set)
**如果有重复的值,可以自动数据去重;
数组去重:
var arr=[1,2,3.4.5,1,4,6,7]
var set=new Set(arr);
arr=[…set] ——先用扩展运算符拆开,然后用[]做成数组;
**set数据结构也是有一些方法的;
(1)size:
set.size
(2)set.add(9),add(10)
(3)set.delete(5)—5是数组中具体的那个值;
(4) set.has(5)
(5)clear 清除所有;
遍历:for of 循环
keys(所有属性名),values(所有属性值),entries(整体,属性名+属性值), forEach(值,属性名)
var arr=[1,2,3.4.5,1,4,6,7]
var set=new Set(arr);
for(var item of set.keys()){
console.log(item)
}
3.map也是一种新的数据结构;各种类型都可以做属性名;
set类似于数组,map类似于对象;
**因为对象的属性名只能是字符串
map中的属性名不限制类型
语法:通过map构造函数去创建(现实中用的很少)
var map=new Map()
取值:set.get(“属性名”) has(“属性名”)delete(“属性名)
size,clear属性都有;
也有四种遍历方法:
for of循环
for (let item of map.keys)(){
console.log(item)
}