1. 程式人生 > >好程式設計師JavaScript分享ES6相關知識

好程式設計師JavaScript分享ES6相關知識

let&&const

[size=0.9em]let與[size=0.9em]var的區別

 

let 變數名=變數值

 

  使用let建立變數和使用var建立變數的區別

 

1、用var宣告的變數會變數提升,用let宣告的變數不會進行變數提升。

 

  用let建立變數

 

let xxx=xxx;

 

  用let建立函式

 

let xxx=function(){}

 

  建立自執行函式

 

;(function(){

 

})();

 

2、用let定義變數不允許在[size=0.9em]同一個作用域中重複宣告一個變數(只要當前作用域中有這個變數,不管是用var還是用let宣告的,再用let宣告的話會報錯:不能重複宣告一個變數),但是可以重複定義(賦值)。

 

let i=10;

 

let i=20;/會報錯,

 

i=20;重複賦值不會報錯

 

3、暫時性死區:在程式碼塊內,使用let命令宣告變數之前,該變數都是不可以使用的。

 

if (true) {

 

// TDZ開始

 

tmp = 'abc'; // ReferenceError,報錯之後下面都不會輸出

 

console.log(tmp); // ReferenceError,報錯之後下面都不會輸出

 

let tmp; // TDZ結束

 

console.log(tmp); // undefined

 

tmp = 123;

 

console.log(tmp); // 123

 

}

 

//下面也會報錯出現TDZ

 

console.log(typeof x); // ReferenceError

 

let x;

 

//作為比較如果一個變數根本沒有被宣告,使用typeof反而不會報錯。

 

console.log(typeof x);// "undefined"

 

4、ES6語法建立的變數(let)存在塊級作用域

 

[ES5]

 

window全域性作用域

 

  函式執行形成的私有作用域

 

[ES6]

 

  除了有ES5中的兩個作用域,ES6中新增加塊級作用域(我們可以把塊級作用域理解為之前學習的私有作用域,存在私有作用域和作用域鏈的一些機制)[size=0.9em]ES6中把大部分用{}包起來的都稱之為塊級作用域;

 

[size=0.9em]const

 

const細節知識點和let類似

 

const宣告的常量只要宣告就必須賦值,而且變數的值是一定的,不能被修改;

 

[size=0.9em]注意:並不是變數的值不得改動,而是變數指向的那個記憶體地址不得改動。對於簡單型別的資料(數值、字串、布林值),值就儲存在變數指向的那個記憶體地址,因此等同於常量。但對於複合型別的資料(主要是物件和陣列),變數指向的記憶體地址,儲存的只是一個指標,const只能保證這個指標是固定的,至於它指向的資料結構是不是可變的,就完全不能控制了。因此,將一個物件宣告為常量必須非常小心。

 

[size=1em][size=1em]const宣告的變數也存在暫時性死區,即只能在宣告的位置之後使用;

 

JS中建立變數的方式彙總

 

[size=1em][size=1em][ES5]

 

· var :建立變數

 

function:建立函式

 

ES5中建立變數或者函式:存在變數提升,重複宣告等特徵;

 

[size=1em][size=1em][ES6]

 

· let建立變數

 

const:ES6中建立常量

 

ES6中建立的變數或者常量:都不存在變數提升,也不可以重複宣告,而且還存在塊級作用域;

 

class:建立一個類

 

import:匯入

 

ES6中的解構賦值

 

[size=1em][size=1em]按照原有值的結構,把原有值中的某一部分內容快速獲取到(快速賦值給一個變數)。

 

  陣列的解構賦值

 

[size=1em][size=1em]解構賦值本身是ES6的語法規範,使用什麼關鍵字來宣告這些變數是無所謂的,如果不用關鍵字來宣告,那麼就相當於給window新增的自定義屬性;(嚴格模式下必須使用關鍵字來宣告,因為嚴格模式下不允許出現不用關鍵字宣告的變數;),如果解構不到值,那麼變數的值就是undefined;

 

let [a,b,c]=[12,23,34];

 

var [d,e,f]=[35,41,63];

 

console.log(a,b,c)//12,23,34;

 

console.log(d,e,f)//35,41,63;

 

[q,w,e]=[1,2,3];//相當於給window添加了三個屬性:q,w,e值分別為1,2,3;(嚴格模式下會報錯)

 

[size=1em][size=1em]多  維陣列的解構賦值,可以讓我們快速的獲取到需要的結果

 

let [a,b,c]=[[45,36],12,[23,43,[1,2[4,[8]]]]23,34];

 

console.log(a)//[45,36]

 

console.log(b)//12

 

console.log(c)//[23,43,[1,2,[4,[8]]]]

 

//陣列中不需要解構的值可用逗號(,)空開,一個逗號代表空開一項

 

let [,,,A]=[12,23,45];

 

console.log(A)//undefined

 

let [,,B]=[12,23,45]

 

console.log(B)//45

 

[size=1em][size=1em]在解構賦值中,支援擴充套件運算子即[size=1em]…[size=1em],只要用了擴充套件運算子,就相當於新生成了一個數組或者物件,如果解構不到值的話,新生成的陣列或者物件為空,而不是undefined,但是擴充套件運算子必須放在末尾

 

let [a,...c]=[12,1,4,83,34];

 

console.log(a)//12

 

console.log(c)//[1,4,83,34];

 

let [a,...b,c]=[12,1,4,83,34];//會報錯,擴充套件運算子只能放在末尾;

 

  物件的解構賦值

 

[size=1em][size=1em]物件的簡潔表示法:

 

const foo = 'bar';

 

const baz = {foo};

 

baz // {foo: "bar"}

 

// 等同於

 

const baz = {foo: foo};

 

[size=1em][size=1em]物件的解構與陣列有一個重要的不同。陣列的元素是按次序排列的,變數的取值由它的位置決定;而物件的屬性沒有次序,變數必須與屬性同名,才能取到正確的值。

 

let { foo, bar } = { foo: "aaa", bar: "bbb" };

 

foo // "aaa"

 

bar // "bbb"

 

  如果變數名與屬性名不一致,必須寫成下面這樣。

 

let { foo: baz } = { foo: 'aaa', bar: 'bbb' };

 

baz // "aaa"

 

  真正被賦值的是後者,而不是前者。

 

let obj = { first: 'hello', last: 'world' };

 

let { first: f, last: l } = obj;

 

f // 'hello'

 

l // 'world'

 

first//error: first is not defined

 

  如果要將一個已經宣告的變數用於解構賦值,必須非常小心。

 

// 錯誤的寫法

 

let x;

 

{x} = {x: 1};//會報錯

 

  因為 JavaScript 引擎會將{x}理解成一個程式碼塊,從而發生語法錯誤。只有不將大括號寫在行首,避免 JavaScript 將其解釋為程式碼塊,才能解決這個問題。

 

// 正確的寫法

 

let x;

 

({x} = {x: 1});

 

放在圓括號當中就可以避免 JavaScript 將其解釋為程式碼塊。

相關推薦

程式設計師JavaScript分享ES6相關知識

let&&const [size=0.9em]let與[size=0.9em]var的區別   let 變數名=變數值     使用let建立變數和使用var建立變數的區別   1、用var宣告的變數會變數提升,用let宣告的變數不會進行變數提升

程式設計師技術分享淺談JavaScript中的閉包

開發十年,就只剩下這套架構體系了! >>>   

程式設計師教程分享Javascript設計模式

好程式設計師教程分享Javascript設計模式 方法一 物件字面量表示法   在物件字面量表示法中,一個物件被描述為一組包含在

程式設計師筆記分享】——檔案和目錄處理

<A href="http://www.goodprogrammer.org/" target="blank">ios培訓</A>------我的objective-c筆記,期待與您交流!  檔案是Objective-C程式設計中是比較重要的一個概念

程式設計師筆記分享】—— C語言中的檔案包含

我們在C語言中引用檔案,有時候會出現重複引用的情況,為了避免發生此種情況,我們想到了一個解決方案。程式碼如下: #include <stdio.h> #include "one.h" #include "two.h" int main(){

程式設計師筆記分享】—— 通過指標遍歷字串中的所有字元

前面我們學習了通過指標遍歷一維陣列,現在我們來通過指標遍歷字串中的所有字元。先來通過陣列的方法進行遍歷,再通過直接字串的方法進行遍歷。程式碼如下: #include <stdio.h> #include <string.h> int main(i

程式設計師筆記分享】—— C語言指標的理解

對於C語言中指標是非常重要的內容,也是C語言的魅力所在。下面我們來看一段程式碼理解指標: #include <stdio.h> int main(int argc, const char * argv[]) { //定義int型別的變數a

程式設計師筆記分享】—— C語言中的extern關鍵字

C語言中的extern關鍵字不僅可以用變數還可以用於函式。當用於函式時,表示宣告函式,引用別人的“外部函式”;當用於變數時,表示宣告一個已經定義過的變數,必須結合定義變數使用。下面我們先來看一個extern用於函式的例子。 先來看一下檔案結構: test.c中的程式碼如下

程式設計師技術分享jQuery實現類似fullpage外掛的全屏滾動效果

開發十年,就只剩下這套架構體系了! >>>   

程式設計師教程分享關於ajax物件一些常見的問題總結

    好程式設計師教程分享關於ajax物件一些常見的問題總結最近比較空閒,於是抽個時間整理些關於a

程式設計師前端分享HTML5 發展史

  好程式設計師前端分享HTML5發展史,HTML5草案的前身名為WebApplications1.0,於2004年被WHATWG

程式設計師Java分享Java案例_英漢字典

好程式設計師Java分享Java案例_英漢字典,在寫程式碼的時候,當滑鼠懸浮在某一個單詞上面的時候,有道詞典點有時會彈出一個訊息氣

程式設計師前端分享使用JS開發簡單的音樂播放器

好程式設計師前端分享使用JS開發簡單的音樂播放器,最近,我們在教學生使用JavaScript,今天就帶大家開發一款簡單的音樂播放器

程式設計師Java分享JVM結構

  好程式設計師Java分享JVM結構,jvm的基本結構,也就是我們俗稱概述。內容很多,而且概念量也很大,關於概念方面,讓概念在你

程式設計師web前端分享詳細瞭解JavaScript函式

好程式設計師web前端分享詳細瞭解JavaScript函式,如果你曾經接觸過JavaScript程式設計,你一定不會陌生如何定義並

程式設計師分享Web前端知識之HTML

  今天好程式設計師分享Web前端知識之HTML。Web前端技術由HTML、CSS和Javascript三大部分構成,而我們在學習

程式設計師分享使用JavaScript正則表示式如何去掉雙引號

好程式設計師分享使用JavaScript正則表示式如何去掉雙引號最近接了一個專案,專案需求需要用js正則表示式過濾掉頁面文字域中值

程式設計師分享JavaScript程式碼組織結構良好的5個特點

好程式設計師分享JavaScript程式碼組織結構良好的5個特點,隨著JavaScript專案的成長,如果你不小心處理的話,他們往

程式設計師Web前端分享一些小知識

好程式設計師Web前端分享一些小知識!為了幫助正在從事Web前端工作和正在學習Web前端的小夥伴更好的瞭解Web前端技術,今天為大

程式設計師web前端教程分享JavaScript驗證API

好程式設計師web前端教程分享JavaScript驗證API,小編每天會分享一下乾貨給大家。那麼今天說道的就是web前端培訓課程中