本人是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ù),努力 加油!!!