ES6的理解

ES6自2015年推出已過了三年,現已成熟使用。好比,const和let定義、箭頭函數、模塊的導入和導出等,已經出如今咱們平常的使用中,能夠說並不陌生,但就係統的學習一直沒開始。前端

最近在看《深刻理解ES6》這本書,結合平常的使用,系統梳理一下(想到哪寫到哪,後續一直添加).vue

一.塊級做用域的出現以及變量定義的改變數組

塊級做用域:大括號包裹的部分造成的局部做用域。函數

ES6以前,JavaScript只有兩種做用域--全局做用域和局部做用域(函數做用域),大括號並不是做用域的界定符,並且具備變量提高的機制.學習

ES6推出後,界定了塊狀做用域,let和const定義也消除了變量提高.this

ES6以前,變量在程序退出後或者函數執行完銷燬變量;ES6後,程序執行到塊級做用域外即銷燬變量.code

let代替var用於定義變量,重複定義時會報錯.
const用於定義常量,且必須初始化,一旦設定後不可更改,不然會報錯.component

書中推薦的最佳實踐:默認使用const定義,只在須要改變的變量中使用let定義。對象

平常使用的感受是定義變量變得簡潔、高效,不須要擔憂變量重名和冗餘了。ip

二.模塊的導出與導入

ES6引入模塊是爲了解決做用域問題。

以前的腳本形式,定義的做用域都是全局做用域;如今的模塊形式,定義的是當前模塊的的做用域,將模塊做用域和全局做用域區分出來,讓日益複雜的前端工程變得容易維護.

export做爲導出符,能夠導出變量、函數、類等。

導出的方式包括導出聲名(export var a=5;)、導出引用(var a=5; export a;)、導出重命名(export a as aaa)、還能夠默認導出(export default)

import做爲導入符,能夠單個導入(import { a } from '/example.js'),多個導入(import { a,b } from '/example.js')、導入整個模塊(不經常使用)、導入時重命名、默認值導入(import a
from ‘example.js’)

默認導入是ES6建立者推崇的導入方法,具備語法純淨、簡潔的特色。

3.對象的擴展

JavaScript中的每個值都是某種特定的對象,提高對象的功能和效率,對日益複雜的程序應用相當重要。

建立對象最流行和高效的方法是對象字面量,能夠完成對象的創建、變動、刪除:

var a = {//建立
    a1: 11,
    a2: 22
}
a.a2 = 222;//變動
a.a3 = 33;
delete a.a3;//刪除對象屬性

其中ES6作出支持了可計算屬性名

var a = {
    a1: 11,
    [newName]: 22//[]表示可計算部分,至關於屬性訪問的方括號訪問法
}

ES6還對對象的使用作出了簡化,例如vue中的使用:

①  components:{
        compA,//原寫法compA: compA(無需重命名時)
        compB
    }
②  computed: {
        dataFlag(){//ES6簡化寫法
            return this.dataF;
        },
        dataFlag1: function(){
            return this.dataF;
        }
    }

ES6還新增了Object.is()和Object.assign()方法:

Object.is()是全等斷定,相對==和===功能更強大
==會進行類型強制轉換,===對+0和-0以及NAN無做用

console.log(+0===-0)//true
console.log(Object.is(+0,-0))//false
console.log(NAN===NAN)//false
console.log(Object.is(NAN,NAN))//true
Object.assign()對象的混入,至關於引入了其餘對象的方法和屬性。

3、解構

解構是ES6新增的、關於對象和數組的、高效、直觀的訪問途徑。

一、對象的解構

objectA = { att1: 12, att2: 34, att3: { att31: 567, att32: 890} }

初始化對象:let { att1,att2 } = objectA;//att1=12,att2=34
重命名:let = {att1: num1, att2: num2} = objectA;//num1=12,num2=34

解構賦值:({ att1,att2 } = objectA);//**必須加小括號,賦值表達式的左側不能爲代碼塊**
函數參數中賦值:function(){ alert(value)}; function({att1,att2} = objectA);//打印objectA的值

嵌套解構:let { att3: { att31 } } = objectA;//att31=567

二、數組解構

arryA = [1,2,3,[4,5],{ab: 6,cd: 7}];

數組解構需列出目標解構值以前的全部元素

[a,b] = arryA; //a=1,b=2
[,c] = arryA; //c=2
[...arryB] = arryA; //arryB = [1,2,3];
[,,,[d]] = arryA; //d=4;
[,,,,{ab}] = arryA //ab=6;

數組解構的小應用:①交換兩個變量的值 [a,b] = [b,a]; ②賦值數組[...arryB] = arryA;

解構表達式的右側不能爲null或undefined

相關文章
相關標籤/搜索