阮一峰《JavaScript標準參考教程》的一些摘要from基本語法篇

如果使用var重新聲明一個已經存在的變量,是無效的。

var x=1;

var x;

上面代碼中,變量x聲明了兩次,第二次聲明是無效的。

但是,如果第二次聲明的同時還賦值了,則會覆蓋掉前面的值。


變量提升

JavaScript引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然后再一行一行地運行。這造成的結果,就是所有的變量的聲明語句,都會被提升到代碼的頭部,這就叫做變量提升(hoisting)。

console.log(a);?

var a=1;

上面代碼首先使用console.log方法,在控制臺(console)顯示變量a的值。這時變量a還沒有聲明和賦值,所以這是一種錯誤的做法,但是實際上不會報錯。因為存在變量提升,真正運行的是下面的代碼。

var a;

console.log(a);

a=1;

最后的結果是顯示undefined,表示變量a已聲明,但還未賦值。

請注意,變量提升只對var命令聲明的變量有效,如果一個變量不是用var命令聲明的,就不會發生變量提升。

console.log(b);

b=1;

上面的語句將會報錯,提示“ReferenceError: b is not defined”,即變量b未聲明,這是因為b不是用var命令聲明的,JavaScript引擎不會將其提升,而只是視為對頂層對象的b屬性的賦值。

標識符

規則如下:

第一個字符,可以是任意Unicode字母(包括英文字母和其他語言的字母),以及美元符號($)和下劃線(_)。

第二個字符及后面的字符,除了Unicode字母、美元符號和下劃線,還可以用數字0-9。

下面這些則是不合法的標識符。

1a? // 第一個字符不能是數字

23 ?// 同上

***? // 標識符不能包含星號

a+b? // 標識符不能包含加號

-d ?// 標識符不能包含減號或連詞線

中文是合法的標示符

JavaScript有一些保留字,不能用作標識符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

另外,還有三個詞雖然不是保留字,但是因為具有特別含義,也不應該用作標識符:Infinity、NaN、undefined。

if結構

var x=1;

var y=2;

if(x=y)

{

console.log(x);

}

// "2"

為避免以上情況,有些開發者習慣將常量寫在運算符的左邊,這樣的話,一旦不小心將相等運算符寫成賦值運算符,就會報錯,因為常量不能被賦值。

if(x=2){ ?// 不報錯

if(2=x){ ?// 報錯

switch結構

需要注意的是,每個case代碼塊內部的break語句不能少,否則會接下去執行下一個case代碼塊,而不是跳出switch結構。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容