ES6一些新特性记录

ES6一些新特性记录

1.箭头操作符

箭头操作符左边是需要输入的参数,右边是返回值

比如运用到js回调函数中可以使书写更加方便

var array=[1,3,5];
//标准写法
array.foreach(function(v,i,a){
  console.log(v);
});
//es6写法
array.foreach(v => console.log(v));

 

又比如一块简单的代码:

function (i){ return i + 1}     //es5写法 
(i) => i + 1;

 

 

如果方程式比较复杂,则需要用{}把代码包起来。

//es5写法:
function (x, y){
  x++;
  y--;
  return x + y ;
}
//es6写法:
(x, y) => {x++; y--; return x + y}

 

 

2.增强对象字面量

es6新特性中对象字面量被增强了,使用更为简洁灵活

a.可以直接在对象字面量里定义原型

b.定义方法可以不用function关键字

c.直接调用父类方法

var human = {
  breath(){
    console.log('breathing')
  }
};
var worker = {
  //直接使用对象字面两定义原型为human,相当于继承human
  __proto__:human,
  company:Earth;
  //定义方法不再需要function
  work(){
    console.log("working")
  };
 
};
human.breath();   //breathing
//调用继承来的human的breath方法
worker.breath();  //breathing

 

 

3.字符串模版

es6新特性中,可以使用反引号``来创建字符串,这种方法可以包含用$和花括号{}包裹的变量

//生成一个随机数
var num = Math.random();
//将这个数输出到控制台
console.log(`your num is ${num}`);
 

 

4.解构

自动解析数组或对象中的值,比如我们平时若要一个函数返回多个值,常规的做法是返回一个对象,将每个值作为对象中的属性返回。但中es6中,可以利用解构这一特性,直接返回一个数组,然后数组中的值回自动被解析到接收该值的变量中。

 

5.let

var name = 'zach'while (true) {
    var name = 'obama'
    console.log(name)  //obama
    break
}
​
console.log(name)  //obama

 

 

es5中只有全局作用域和函数作用域,这样带来了很多不合理的场景,比如上面demo中,内层变量覆盖外层变量,而let实际上为JS新增了块级作用域,用它所声明的变量,只在let命令所在的代码块内有效。

let name = "shark";
while(true){
  let name = "Jan";
  console.log(name);    //Jan
  break;
}
console.log(name);      //shark

 

var另一个不合理场景就是:用来计数的循环变量,泄露为全局变量,比如

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

 

上面变量中,变量i是var声明的,在全局范围内有效,所以每一次循环,新的值都会覆盖旧的值,这就导致,最后循环结束时输出的是10.而使用let则不会出现这个问题。

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

 

因为let只在自己所在的块级作用域有效,所以i不会泄露成全局变量,最后输出的仍然是数组a中下标为6的值。

 

6.const

const也可以用来声明变量,只不过它声明的是变量,一旦声明就不能够改变

const PI = Math.PI
PI = 24;    //ERROR

 

当我们想去改变const声明的常量时,浏览器就会报错。

const有一个很好的应用场景,当我们使用第三方库声明的变量时,可以避免不小心重命名而导致出现的bug.

 

7.默认参数值

es6可以直接在定义函数时指定参数的默认值,而不需要逻辑运算符了

// 常规做法
function sayHello(){
  var name = name || "Jan";
  console.log('hello '+name);
}
// es6写法
function sayHello(name = "Jan"){
  console.log('hello ${name}');
}
​
// 常规 result:
sayHello():hello Jan ;
sayHello('Jack'):hello Jack ;
​
// es6 result
sayHello(): hello Jan ;
sayHello('Tony'): hello Tony ;

 

8.template语法

当我们要引入大段html到文档中时,传统的写法是:

$("#result").append(
  "There are <b>" + basket.count + "</b> " +
  "items in your basket, " +
  "<em>" + basket.onSale +
  "</em> are on sale!"
);

 

我们需要引一大堆的+号用来连接文本与变量。而使用es6中模版字符串后,我们可以这样写

$('result').append('
There are <b>${basket.count}</b>
items in your basket<em>${basket.onSale}</em>
are on sale!
')

 

9.for of 值遍历

es5中我们都知道用for in 遍历数组,对象,es6中提供的for of与其功能相似,只不过它遍历的不是序号而是值。


 

var arr = [a, c, e, g];
for (v of arr){
  console.log(v);     //a , c , e ,g
}

 

posted @ 2017-09-10 20:27  鲨鱼余烁  阅读(483)  评论(0编辑  收藏  举报