ES6基礎知識01(let,const,解構賦值)

ES6 新增特徵整頓解說

新增敕令

1.let敕令

ES6新增了let敕令,用來聲明變量。它的用法相似於var,然則也存在新的特徵。

 - **let所聲明的變量,只在let敕令地點的代碼塊內有效。適用於for輪迴**
 
            var a = 3;
            var a = 4;
            
            let b = 4;
            
            {
                var a = 5;
                let b = 5;    //作用域僅在代碼塊內部
                let c = "this is inner c";
                var d = "this is inner d";
                console.log(b);    //b = 5
            }
          
            console.log(a);    //a = 5
            console.log(b);    //b = 4
            console.log(d);    //this is inner d
            console.log(c);    //c is not defined

for輪迴

    按理說,在實行完for輪迴后,應當開釋變量的值,不然能夠會對全局變量形成影響,因而,聲明為let,會更好。
            //運用var 聲明
            var result  = 0;
            for(var i = 0;i<100;i++){
                result += i;
            };
            console.log(result);    //5050
            console.log(i);    //101
            //運用let 聲明
            var result  = 0;
            for(let i = 0;i<100;i++){
                result += i;
            };
            console.log(result);    //5050
            console.log(i);    // i is not defined
 - **不存在變量提拔**

            //先操縱
            console.log('var變量提拔',a);    //undefined
            console.log('let沒有變量提拔',b);    //報錯:b is not defined
            //再聲明
            var a = 3;
            let b = 4;
           
 - **暫時性死區**

            var tmp = 123; 
            if (true) {
                tmp = 'abc'; // ReferenceError 
                let tmp; 
            } 
 - **不許可反覆聲明**
    ```
        var a = 3;
        var a = 4;
        
        let b = 4;
        let b = 5;     //TypeError:Duplicate declaration "b"
        console.log(a);//a = 4
        console.log(b);
    ```
    

2.const敕令

基礎用法:const聲明一個只讀常量。一旦聲明,常量的值就不能轉變。相似於Java中的final關鍵字。

      const PI = 3.1415; PI = 3; // TypeError: Assignment to constant variable

const聲明的變量不得轉變值,這意味着,const一旦聲明變量,就必需馬上初始化,不能留到今後賦值。

      const foo; // SyntaxError: Missing initializer in const declaration

其他特性與let一樣,具有不能反覆聲明,具有塊級作用域,暫時性死區。

解構賦值

ES6 許可根據肯定形式,從數組和對象中提取值,對變量舉行賦值,這被稱為解構(Destructuring)。比方:

let [a, b, c] = [1, 2, 3];

本質上,這類寫法屬於“形式婚配”,只需等號雙方的形式雷同,左側的變量就會被給予對應的值。假如解構不勝利,變量的值就即是undefined。另一種狀況是不完全解構,即等號左側的形式,只婚配一部分的等號右側的數組。這類狀況下,解構依舊能夠勝利。

1.對象的解構賦值

a>對象的屬性沒有序次,變量必需與屬性同名。

在ES5中

var obj ={
    name = "tom,
    age = 12,
};
var name = obj.name;
var age = obj.age;

在ES6中

let {name:name,age:age} = obj;
let{name,age} = obj;
console.log(name,age);

b>假如變量名與屬性名不一致,必需寫成下面如許。

    var { foo: baz } = { foo: 'aaa', bar: 'bbb' };     //baz = "aaa”



c>嵌套解構

let obj = { p: [ 'Hello', { y: 'World' } ] }; 
let { p: [x, { y }] } = obj;     //x = "Hello”; y = "World”

d>默認值(默認值見效的前提是,對象的屬性值嚴厲即是undefined)

var {x: y = 3} = {}; y // 3



2.數組的解構賦值

let [a, b, c] = [1, 2, 3];

a>不完全解構

let [a, [b], d] = [1, [2, 3], 4];    //a = 1; b = 2; d = 4 

b>鳩合解構

let [head, ...tail] = [1, 2, 3, 4];     //head = 1; tail = [2, 3, 4]

c>默認值(當婚配值嚴厲即是undefined時,默認值見效)

let [x, y = 'b'] = ['a'];     // x='a', y='b’

d>默認值也能夠為函數

function f() { console.log('aaa'); } 
let [x = f()] = [1]; 



let [a,b,...c] = ["terry","lerry","tom","jack"];
console.log(a);    //terry;
console.log(b);    //lerry;
console.log(c);    //["tom","jack"]

3.字符串的解構賦值
a>解構時,字符串被轉換成了一個相似數組的對象。

const [a, b, c, d, e] = ‘hello’;    //a=h;b=e;c=l;d=l;e=o

b>也能夠對數組的屬性解構

let {length : len} = ‘hello’;     //len = 5

c> 數值和布爾值解構賦值

解構時,假如等號右側是數值和布爾值,則會先轉為對象
let {toString: s} = 123;     //s === Number.prototype.toString true
let {toString: s} = true;     //s === Boolean.prototype.toString true

4.函數參數的解構賦值
基礎語法:

function add([x, y]){ return x + y; } 
add([1, 2]);

默認值:

function move({x = 0, y = 0} = {}) {
     return [x, y]; 
} 
move({x: 3, y: 8}); // [3, 8] 
move({x: 3}); // [3, 0] 
move({});     // [0, 0]
move();     // [0, 0]
    

解構賦值的罕見用處

1.交流變量的值

let x = 1; let y = 2; [x, y] = [y, x];

2.從函數返回多個值

function example() { return [1, 2, 3]; } 
let [a, b, c] = example();

3.函數參數的定義

function f([x, y, z]) { ... } 
f([1, 2, 3]);

4.提取JSON數據

let jsonData = { id: 42, status: "OK", data: [867, 5309] }; 
let { id, status, data: number } = jsonData;

5.輸入模塊的指定要領

const { SourceMapConsumer, SourceNode } = require("source-map");

6.函數參數的默認值

jQuery.ajax = function (url, { 
    async = true, cache = true, global = true, 
    beforeSend = function () {}, 
    complete = function () {},     
    // ... more config 
}) { // ... do stuff };

7..指定參數的默認值,就避免了在函數體內部再寫var foo = config.foo || ‘default foo’;如許的語句
遍歷map構造

var map = new Map(); 
map.set('first', 'hello'); 
map.set('second', 'world'); 
for (let [key, value] of map) { 
    console.log(key + " is " + value); 
}

——————————————————————–本次完畢————————-

    原文作者:純純王
    原文地址: https://segmentfault.com/a/1190000015066972
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞