今天说说ECMAScript6吧,其实es6不是什么的框架之类的,它就是在原生js,把原生js修修改改,然后在原来的基础上添加一些新的语法,而这些语法就是从java等语言上参照的。
今天就说一些常用的语法吧。
首先就是定义变量了:
let和const
1.let定义方式和var定义一样
let a=1; //和正常的定义一样,不允许重复定义,在并不存在坑人的预解析
2.let块级作用于
例如:
function test(){
let a=1;
}
console.log(a) //报错a is not defined,其实a是在函数里面定义的,也就是说函数test形成了一个块级作用域外面无法访问。
下面的例子大家会看的相当的清楚
for(let i=0;i<5;i++){
for(let i=1;i<7;i++){
console.log(a)
}
console.log(b)
}
const
其实大家了解Java的就会发现const和java里的final一样,也就是定义的变量后面不可以改变。
例如:
const a=10;
a=1;
const这样定义就会报错的
const不存在预解析,只有暂时的死区
const也就这些了,其实也没什么了
二,结构赋值
let [a,b,c]=[1,2,3]
//a=1,b=2, c=3
这就是结构赋值,特别简单同时也是特别的好用
当然这只是简单的结构赋值,还有好多结构赋值例如:
1.数组的解构赋值
let [a, b, c] = [1, 2, 3
2.对象的解构赋值
let [a,b]={a:"aaa",b:"bbb"} //a="aaa" b="bbb"
3.字符串的解构赋值
const [a, b, c, d, e] = 'hello';
4.函数参数的解构赋值
function add([x, y]){
return x + y;
}
add([1, 2]); // 3
三.箭头函数
// function show() {
// alert(123)
//}
//show();
上下两个函数是一样的
let show=()=>{
alert(123)
}
show()
当只有一个参数的时候=后面的()可以省略了
let show = a=>{
alert(a);
};
show(20);
省略小括号的情况
/*let show = (a)=>{
alert(a);
}*/
上下形成鲜明的对比,我就不一一解释了(一个参数)
let show = a=>{
alert(a);
}
show(20);
省略大括号的情况
/*let show = a=>{
return a+10;
}*/
let show = a=>a+10;
alert(show(4));
注:箭头函数自带返回值
四.各种扩展
es6对正则,数组,数值,对象等都作出了,扩展我就不多做解释了
五Set和Map
set其实和数组差不多,唯一区别就是set没有重复的
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4 赋值这段代码就会发现其奥妙
Map插入的时候可以插入键值对
let map = new Map();
map.set('title','123456');
map.set('content','7897987');
for(var item of map ){
alert(item[0]); //title content
alert(item[1]); //123456 7897897
}
六.Promise 对象
promise:是一种异步编程的解决方案。有两个大的特点:
(1).对象的状态不受外界影响,有三种状态Pending(进行),Resolved(完成),Rejected(失败);
(2).一旦状态改变,就不会再变,任何时候都可以得到这个结果.它的状态改变只有两种可能,从Pending变为Resolved和从Pending变为Rejected。
Promise新建后就会立即执行
let promise = new Promise(function(resolve, reject) {
console.log('1');
resolve();
});
promise.then(function() {
console.log('2.');
});
console.log('3');
结果:1 3 2大家可以在编辑器上试试
promise还有好多呢,我就不一一解释了。
es6还有好多有用的东西,比如for of 循环,Generator函数,Generator里的yeild和next,async函数(**es7将会大量的使用),还有面向对象的class,不像原生js里的prototype那样了,而是用class,还有module(模块),等这些都是特别有用的东西,我就不一一解释了,以后有时间可能会的。