ECMAScript 6學習(一)

本人是android開發(fā)的,由于最近React Native的火熱,再加上自己完全不懂JS的語法,俗話說的好"落后就要挨打",雖然不知道誰說的,不過很有道理.

所以從今天開始正式進入ECMAScript的學習

學習書籍《ECMAScript 6 入門 》

let和const命令


首先作為一名android狗,我就用java的語法來理解ECMAScript

相對于java 的多種多樣的聲明(int 、string、double等?),ECMAScript的聲明 就只有?

var 、let和const "吧" (原諒我用"吧"這個詞,因為我也是剛接觸,目前我就見到過這三個 (┬_┬)!!!);

其中l(wèi)et是ECMAScript 6 新添加的命令,和var一樣都是用了聲明變量的,而const是用來聲明常量的;

let和var的區(qū)別:

var可以跨代碼塊,也就相當于java語言中 public,對的就是全局變量;

?let只在本代碼塊有效,相當于java語言中?private,也就是局部變量;

{

let a=10;

var b=1;

}

a // ReferenceError: a is not defined.

b // 1

上面的代碼大致就是說明了情況

let為局部變量,即在代碼塊中有效,已離開代碼塊就會報錯;

var是全局變量,所以在哪里都不會報錯的(就我 學習的進度來看,var 不管在哪里聲明都是全局變量,也就是說只要你聲明了,都可以獲得該變量的值);

暫時性死區(qū)

在代碼塊內(nèi),使用let命令聲明變量之前,該變量都是不可用的。這在語法上,稱為“暫時性死區(qū)”

var tmp ?= 123;

if(true){

tmp = 'abc';? //ReferenceError 這句話會報錯

let tmp

}

這個時候我就奇怪了,為什么那一行會報錯呢,按照執(zhí)行順序來看是沒問題的.

原來在ECMAScript 中有這么一種寫法就是先使用后定義

即:?

tmp = 123;

var tmp;

也就是說在let沒有出現(xiàn)之前,這種寫法是不會報錯的;

也就是為了杜絕這種不規(guī)范的寫法,let命令中有這種規(guī)則,而且更加夸張的規(guī)范,只要是代碼塊中有 let聲明,那么即便是外面出現(xiàn) var 聲明的同名變量,在let之前執(zhí)行,也會視為 let命令聲明變量之前,使用該變量,從而出現(xiàn)"暫時性死區(qū)".

let變量不允許重復聲明

let在相同的作用域,不能重復聲明同一個變量

//錯誤

funcation(){

let a = 10;

var a = 22;

}

//錯誤

funcation(){

let a = 10;

let a = 12;

}

以上兩種寫法都是錯誤的.

因此,不能在函數(shù)內(nèi)部重新聲明參數(shù)。

functionfunc(arg){

letarg;// 報錯

}

functionfunc(arg){

? ? {

? ? ?letarg;// 不報錯

? ?}

}

map()方法

map() 用于批量轉(zhuǎn)換,括號里面可以放一個方法

例:

[1, undefined, 3].map((x = 'yes') => x);

這句話的意思是用map() 批量對[1, undefined, 3] 這個數(shù)組進行處理

處理的方式是

(x = 'yes') => x;

即:

function xxx(x='yes'){

return x;

}

的縮寫,此方式在ECMAScript6才支持;

其中(x='yes')就是x參數(shù)的默認值;

圓括號的使用

不能使用圓括號的情況

1.變量聲明語句中,不能帶有圓括號

?例如:

?let [(a)] = [1];

?let {x: (c)} = {};

?let ({x: c}) = {};

?let {(x: c)} = {};

?let {(x): c} = {};


?let { o: ({ p: p }) } = { o: { p: 2 } };

?上面的語句都會報錯


2.函數(shù)參數(shù)中,模式不能帶有圓括號

?例如:

?function f([(z)]){return z};

?上面的語句都會報錯


?3.賦值語句中,不能將整個模式,或嵌套模式中的一層放在圓括號里


({ p: a }) = { p: 42 };

([a]) = [5];

[({ p: a }), { x: c }] = [{}, {}];

[({ p: a }), { x: c }] = [{}, {}];

上面代碼將整個模式放在圓括號之中,導致報錯。

可以使用圓括號的情況

可以使用圓括號的情況只有一種:賦值語句的非模式部分,可以使用圓括號。

[(b)] = [3]; // 正確

({ p: (d) } = {}); // 正確

[(parseInt.prop)] = [3]; // 正確

上面三行語句都可以正確執(zhí)行,因為首先它們都是賦值語句,而不是聲明語句;

其次它們的圓括號都不屬于模式的一部分。

第一行語句中,模式是取數(shù)組的第一個成員,跟圓括號無關;

第二行語句中,模式是p,而不是d;

第三行語句與第一行語句的性質(zhì)一致。

今天的學習就到這里了,明天繼續(xù),努力 加油!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 4,087評論 0 6
  • 1.數(shù)組的解構(gòu)賦值 2.對象的解構(gòu)賦值 3.字符串的解構(gòu)賦值 4.數(shù)值和布爾值的解構(gòu)賦值 5.函數(shù)參數(shù)的解構(gòu)賦值 ...
    卞卞村長L閱讀 952評論 0 0
  • 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就是一個語句。 ...
    米塔塔閱讀 504評論 1 10
  • 時隔4年,重新走進校園,看著道路兩旁的茵茵綠草,回想起上次忙里偷閑從單位跑出來回學??蠢蠋?,心里還是滿滿的恬靜。不...
    超人Vs逍遙閱讀 802評論 0 1
  • 現(xiàn)在有好多幫助我們養(yǎng)成習慣的工具,在越來越意識到習慣的重要性后來人們開始慢慢培養(yǎng)自己的好習慣。習慣養(yǎng)成是不容易的,...
    劉你你閱讀 358評論 1 2

友情鏈接更多精彩內(nèi)容