简介百度 阮一峰------es6
Babel转码规则:function可以由箭头代替,如果块级中只有一行代码,可以省去return
input.map(function (item) {
return item + 1;
})
//es6标准
input.map(item =>item + 1)
let与var区别
1.let存在块级作用域 2.let不会提升变量作用域(let和const) 3.暂时性死区(未声明,提前用变量,会报错) 4.不允许在相同作用域内重复声明同一个变量
1.let存在块级作用域
if('ture') {
var a = 100;
var a = 10;
let b = 10;
}
// console.log(b,a); //报错 //let存在块级作用域
// for循环就很适合let,因为计数变量只会在体内有效
2.let不会提升变量作用域(let和const)
console.log(c) //undefine 变量声明提升
var c = 1000;
console.log(d) //报错
let d = 1000;
3.暂时性死区(未声明,提前用变量,会报错)
第一种:
//①
if('true') {
w = 123;
let w;
console.log(w) //报错
}
第二种:
//②
function bar(x = y , y = 2 ) {
return [x,y]
}
bar() /*报错*/
第三种:
// ③在变量还没有声明完成时就取变量的值
var a = a; //undefine
let y = a; //报错
解构赋值
es6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这杯称为解构
let a = 10;
let b = 11;
let c = 12;
// 现在可以从数组中提取值
let [a,b,c] = [11,12,13];
console.log(a,b,c);
// 实质上,这种属于"模式匹配"
let [,,fff] = [11,12,13];
console.log(fff)
// 默认值,es6中内部使用的是严格相等运算符(===),判断一个位置是否有值。所以,只有当数组元素严格等于undefind,默认值才会有效
let [f = 1] = [];
// f = 1
let [ffff = 1] = [undefined];
// f = 1
let [fffff = 1] = [null];
// ff = null
// 对象的解构赋值(顺序不需要对应,但名字要对应)
// 真正 杯赋值的是后面的 obj1 obj2
let {obj1,obj2} = {obj1:"aa",obj2:'bb'};
// let {obj3} = {obj1:"aa",obj2:'bb'}; //undefined
// obj1 aa
// obj2 bb
// obj3是匹配模式 真正杯赋值的是后面的 bar才是变量
let {obj3:bar} = {obj1:"aa",obj3:'bb'};
// 字符串解构赋值
let{length : len} = 'hello';
// len //5
// 函数的解构
function f1(x = 10,y = 20) {
return x + y;
}
console.log(f1())
// 函数解构也可以传参 ,用对象方式来写
function f2({x = 10,y = 20}) {
return x + y;
}
/*console.log(f2()) */ //报错
console.log(f2({})) //必须得传值,哪怕是一个空对象 ,如果不给x值,会输出NaN
console.log(f2({y:100})) //110
rest
<!--rest用于获取多余的参数,该变量将多余的参数放入数组中-->
function f(x,y,z,...arg) {
console.log(arg) //length ==3 4 5 6
console.log(arguments)
}
f(1,2,3,4,5,6)