ECMAscript6

简介:

ECMAscript6是javascript语言的下一代标准,于2015年6月发布,为了使JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

1.let命令定义变量

 a.let没有声明提前

console.log(a)
let a = 10
//此时打印台会报错,访问的是window,window上无a

b.let具有块级作用域,声明的变量只在let命令的代码快内有效

{
    let a = 10
    console.log(a)//打印10
}
console.log(a);//回报错,无法访问到a

 但此时的let非常适合for循环

  如果是var的话由于预编译函数还未执行时i的值已经是10了

        var a = [];
        for (var i = 0; i < 10; i++) {
          a[i] = function () {
            console.log(i);
          };
        }
        a[6](); // 传入0-9打印的都是10;       

  let就不会出现这样的情况了

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 打印6

c.var如果重复声明,后面会覆盖前面,现在  let不允许重复声明

2.const定义常量

 一旦声明,常量的值就不可改变

const p = 1;
console.log(p);//1
p = 3;
console.log(p)//报错

const一旦声明变量,就必须立即初始化,不能留到以后赋值。

const p;
console.log(p);//报错

3.字符串的拼接

        var uname = "jack"
        var str = ""
        str += "<ul> \
            <li> " + uname + "</li> \
            <li>nan</li> \
            <li>18</li> \
            <li>150123456878</li> \
            <li>xxx@xxx.com</li> \
        </ul>"
        // 切换成:
        str += `<ul> 
            <li>${uname}</li> 
            <li>nan</li> 
            <li>18</li> 
            <li>150123456878</li> 
            <li>xxx@xxx.com</li> 
        </ul>`            

4.数组的复制  ---   ...超引用

     var arr = [1,2,3,4,5];
        console.log(...arr)//1 2 3 4 5
          // ... 超引用
        var arr4 = [...arr];//新数组
        console.log(arr4)

5.解构赋值

      // 解构,数组的格式
        var [a,b,c] = [40,20,30];
        console.log(a,b,c)//40 20 30

        var [a,[b,c],d] = [5,[10,20],30];  //格式对应即可
        console.log(a,b,c,d)//5 10 20 30

        // json格式
        var {a,b,c} = {a:10,c:30,b:20};    //可以调换顺序
        console.log(a,b,c);//10 30 20

        // 解构
        var [{a,b},c,[d,e],f] = [{b : "jack",a : "100"},5,[10,20],30];
        console.log(a,b,c,d,e,f)//100 jack 5 10 20 30    

6.循环

for   of循环只能用来遍历数组,不可以遍历obj

     var arr = ["red","green","blue","yellow","black"];
        for(var i of arr){
            console.log(i);   //输出的直接是值
        }

7.Map对象

// map就是用来存东西的,跟obj类似
        var map = new Map();   
        console.log(map);
        map.abc = "jack";
        map.age = "100";
        console.log(map);

        // 设置值  增 该
        map.set("a","red");
        map.set("b","green");

        //
        console.log(map.abc);
        console.log(map.get('a'));

        // 删除
        delete map.abc;
        delete map.a;
        map.delete("a");
        console.log(map)

8.箭头函数

只是写法上改变了

// var fun = function(){

// }
var fun = () => {
    console.log('hello')//hello
} 
fun()

9.promise对象

主要是用来处理异步数据的

在promise中,有三种状态,但只有两种可能

pending(等待,处理中)     --->     resolve(完成)
                                               --->     rejected(失败,拒绝)

const promise = new Promise(function(resolve, reject) {

  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

Promise生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

promise.then(function(value) {
  // success
}, function(error) {
  // failure
});

 

//all
// 只有当所有的promise全部成功才能走成功,否则失败
        var p1 = Promise.resolve(10);
        var p2 = Promise.resolve(20);
        var p3 = Promise.reject(30);
        
        Promise.all([p1,p2,p3]).then(function(data){
            console.log(data);
        },function(err){
            console.log(err);
        })

 

// race也是返回一个promise对象
// 获取最先得到的结果,得到以后就不去执行了

        var p1 = new Promise(function(resolve,reject){
            setTimeout(resolve,100,"first");
        })
        var p2 = new Promise(function(resolve,reject){
            setTimeout(resolve,50,"second");
        })


        Promise.race([p1,p2]).then(function(val){   
            console.log(val)//second
        })

 

var p1 = Promise.resolve(10);

        var p2 = Promise.resolve(p1);    //成功的promise里面可以传递一个成功的promise对象

        p2.then(function(data){
            console.log(data);//10
        })

 

posted @ 2019-03-06 10:15  徐-航  阅读(185)  评论(0编辑  收藏  举报