ES6(总结)

简介: ES6(总结)

1. let


let用法基本跟var差不多,只是更加的严谨了。

不存在变量提升,变量要在声明后才能够使用。

不允许在相同作用域重复命名同一变量。


2. const


const 常量,定义后不能再改变,不能赋值,同样不能变量提升,不可重复声明。


3. 变量解构赋值


以前只能这样子写


function data(){
    var obj={
        a:1,
        b:2
    }
    return obj;
}
var aa=data();

es6可以这样写


function  data(){
    var a=1,b=2;
    return [a,b];
}
var [x,y]=data();
console.log(x);    //1
console.log(y);    //2

深度匹配

function setting(){
 return {display:{color:'red'},keyboard:{layout:'querty'}};
}
const {display:{color:displayColor},keyboard:{layout:keyboardLayout}} = setting();
console.log(displayColor, keyboardLayout); //red querty


4. 模板字符串


es5填充字符串需要这样

var a=1,b=2;docuemnt.getElementById('test').appendChild('<b>'+a+'</b><b>'+b+'</b>');

这样的写法很不方便,也很难读懂。

es6可以这样写

let a=1,b=2;docuemnt.getElementById('test').appendChild(`<b>${a}</b><b>${b}</b>`);

模板字符串是增强版字符串,用反引号(`)标记


5. Math对象的扩充


Math.trunc() 去掉小数部分

Math.sign() 判断一个数是正数,负数还是零


6.函数扩展


  • 函数参数默认值
    可以设置默认值,eg:
function log(x,y='小明'){
    console.log(x,y);
}
log('hello');    //hello 小明
log('hello','xiaoming');    //hello xiaoming
log('nihao','');    //nihao


后来开发人员可以方便的调用你的函数

  • rest参数,代替arguments,用途不大,写法(...变量名)
  • 扩展运算符
    可代替apply方法
Math.max(null,[14,3,77]);
Math.max(...[14,3,7]);
Math.max(14,3,7)


三种写法运行效果相同。


7. 箭头函数


一个参数的写法

var f= v => v  //es5
var f=function(v){
    return v; 
}


没有参数或者是多个参数

var f = () => 1//es5
var f = function(){
    return 1;
}
var sum = (num1, num2) =>  num1 + num2;//es5
var sum = function(num1, num2){
    return num1+num2;
}


一个参数其实也是可以加括号的,所以可以统一一下都加括号,就不用记那么多了

var f = (v) => v;


  • => 函数使用说明:
    (1)函数体this是指定义时所在的对象,不是使用时所在对象。
    (2)不可以使用new命令,否则会抛出一个错误。
    (3)不可使用auguments对象,可以用rest参数代替。


8.类和对象


//es5
var Animal=function(name){
    this.name=name;
}
animal.prototype={
    speak:function(){
        console.log("I am"+this.name);
    }
}
var animal = new Animal("cat");animal.speak();  //I am cat
//es6
class Animal(){
    constructor(name){
        this.name=name;
    }
    speak(){
        console.log("I am"+this.name);
    }
}
const animal=new Animal("cat");animal.speak();    //I am cat

其实我并不觉得这个有很大作用,代码也不会缩少很多,只是适应后台java人员转成前端。不过对于继承却有比较大作用。


9.继承


//es5
function A(){
    this.a='a';}function B(){
    this.b='b';
}
B.prototype=new A();
var b=new B();b.a;        //a
B.prototype.a='changed';b.a;        //changed
//es6
class A{
    constructor(){
        this.a='a';
    }}class B extends A{
    constructor(){
        super();
        this.b='b';
    }
}
var b=new B();b.a;        //a


10.promise


用promise可以替代回调函数,不过这个现在用babel还是转不了。没多大用。

es5


function printAfterTimeout(string, timeout, done){
      setTimeout(function(){
            done(string);
      }, timeout);
}
printAfterTimeout('Hello ', 2e3, function(result){
      console.log(result);
      printAfterTimeout(result + 'Reader', 2e3, function(result){
            console.log(result);
      });
});

可以看到这样一环一环的进行下去是很恐怖的,也很难维护。

es6的写法是这样的。

function pat(string,timeout){
    var p = new Promise((resolve,reject) => {
        setTimeout(function(){
            resolve(string);
        },timeout);
    });
    return p;
}
pat('hello',1000).then( (result) => {
    console.log(result);    //hello
    return pat(result + '小明',2000);}).then( (result) => {
    console.log(result);      //hello 小明
})

这个比较难,说明一下:

var p = new promise(function(resolve,reject){});

主要是promise对象上有个then( fn1, fn2);

fn1对应的是resove就是执行成功的函数。

fn2对应的是reject就是执行失败的函数。

在ajax中就会运用到这两个东西。


目录
相关文章
|
前端开发 JavaScript Java
ES11,ES12,ES13
ES11,ES12,ES13
107 1
|
6月前
|
前端开发 JavaScript 网络架构
|
6月前
ES6常用知识小结
ES6常用知识小结
32 0
|
前端开发 索引
ES7,ES8
ES7,ES8
62 0
|
前端开发 JavaScript API
ES6-day03
ES6-day03
55 0
ES6 Day02
ES6 Day02
60 0
|
JavaScript 前端开发 Java
【ES6】初识
【ES6】初识
|
JSON JavaScript 前端开发
ES5和ES6的介绍
《前端基础》
426 0
ES2016
ES2016
181 0
|
JavaScript 前端开发
Day19 ES6
ECMAScript 6.0
103 0