21天(js高程)-第3天

第3章 基本概念


ECMA-262 通過(guò)叫做 ECMAScript 的“偽語(yǔ)言”為我們描述了 JavaScript 的所有這些基本概念。

3.1 語(yǔ)法

ECMAScript 的語(yǔ)法大量借鑒了 C 及其他類(lèi) C 語(yǔ)言(如 Java 和 Perl)的語(yǔ)法。


3.1.1區(qū)分大小寫(xiě)

ECMAScript 中的一切(變量、函數(shù)名和操作符)都區(qū)分大小寫(xiě)。


3.1.2 標(biāo)識(shí)符

所謂標(biāo)識(shí)符,就是指變量,函數(shù),屬性的名字,或者函數(shù)的參數(shù)。

第一個(gè)字符必須是一個(gè)字母、下劃線(_)或一個(gè)美元符號(hào)($);
其他字符可以是字母、下劃線、美元符號(hào)或數(shù)字。

按照慣例, ECMAScript 標(biāo)識(shí)符采用駝峰大小寫(xiě)格式,也就是第一個(gè)字母小寫(xiě),剩下的每個(gè)單詞的首字母大寫(xiě),例子:doSomethingImportant

不能把關(guān)鍵字、保留字、true、false和null用作標(biāo)識(shí)符。


3.1.3注釋

單行注釋?zhuān)?/
塊級(jí)注釋/*
? ? ? ? ? ? ? *這是一個(gè)多行
? ? ? ? ? ? ? *(塊級(jí))注釋
? ? ? ? ? ? */


3.1.4 嚴(yán)格模式

ECMAScript 5 引入了嚴(yán)格模式(strict mode)的概念。嚴(yán)格模式是為JavaScript定義了一種不同的解析與執(zhí)行模型。在嚴(yán)格模式下, ECMAScript 3 中的一些不確定的行為將得到處理,而且對(duì)某些不安全的操作也會(huì)拋出錯(cuò)誤。

要在整個(gè)腳本中啟用嚴(yán)格模式,可以在頂部添加如下代碼:
" use strict";
用于告訴支持的JavaScript引擎切換到嚴(yán)格模式。這是為不破壞ECMAScript 3 語(yǔ)法而特意選定的語(yǔ)法。

在函數(shù)內(nèi)部的上方包含這條編譯指示,也可以指定函數(shù)在嚴(yán)格模式下執(zhí)行:
function doSomething(){
? ? ?"use strict";
? ? ?//函數(shù)體
}

嚴(yán)格模式下, JavaScript 的執(zhí)行結(jié)果會(huì)有很大不同,支持嚴(yán)格模式的瀏覽器包括 IE10+、 Firefox 4+、 Safari 5.1+、 Opera 12+和 Chrome。


3.1.5 語(yǔ)法

ECMAScript 中的語(yǔ)句以一個(gè)分號(hào)結(jié)尾;如果省略分號(hào),則由解析器確定語(yǔ)句的結(jié)尾。雖然語(yǔ)句結(jié)尾的分號(hào)不是必需的,但我們建議任何時(shí)候都不要省略它。

可以使用 C 風(fēng)格的語(yǔ)法把多條語(yǔ)句組合到一個(gè)代碼塊中,即代碼塊以左花括號(hào)({)開(kāi)頭,以右花括號(hào)(})結(jié)尾:

if (test){
? ?test = false;
? ?alert(test);
}

雖然條件控制語(yǔ)句(如if語(yǔ)句)只在執(zhí)行多條語(yǔ)句的情況下才要求使用代碼塊,但最佳實(shí)踐是始終在控制語(yǔ)句中使用代碼塊——即使代碼塊中只有一條語(yǔ)句,例如:

if (test)
? ? alert(test); ? ? ? ? ?//有效但容易出錯(cuò),不要使用

if (test){ ? ? ? ? ? ? ? ? //推薦使用
? ? alert(test);
}

在控制語(yǔ)句中使用代碼塊可以讓編碼意圖更加清晰,而且也能降低修改代碼時(shí)出錯(cuò)的幾率。


3.2 關(guān)鍵字和保留字

ECMA-262 描述了一組具有特定用途的關(guān)鍵字,這些關(guān)鍵字可用于表示控制語(yǔ)句的開(kāi)始或結(jié)束,或者用于執(zhí)行特定操作等。按照規(guī)則,關(guān)鍵字也是語(yǔ)言保留的,不能用作標(biāo)識(shí)符。以下就是 ECMAScript的全部關(guān)鍵字(帶*號(hào)上標(biāo)的是第 5 版新增的關(guān)鍵字):

break; do; instanceof; typeof; case; else; new; var; catch; finally; return; void; contitue;
for; switch; while; debugger*; function; this; with; delete; in; try

ECMA-262 還描述了另外一組不能用作標(biāo)識(shí)符的保留字。盡管保留字在這門(mén)語(yǔ)言中還沒(méi)有任何特定的用途,但它們有可能在將來(lái)被用作關(guān)鍵字。以下是 ECMA-262 第 3 版定義的全部保留字:

abstract ; enum; int; short; boolean; export; interface; static; byte; extends; long; super; char; final; native; synchronized; class; float; package; throws; const; goto;
private; transient; debugger; implements; protected; volatile; double; import; public;?

第 5 版把在非嚴(yán)格模式下運(yùn)行時(shí)的保留字縮減為下列這些:
class; enum; extends; super;?const; export; import;

在嚴(yán)格模式下,第 5 版還對(duì)以下保留字施加了限制:
implements; package; public;?interface; private; static;?let; protected; yield;

注意, let 和 yield 是第 5 版新增的保留字;其他保留字都是第 3 版定義的。為了最大程度地保證兼容性,建議讀者將第 3 版定義的保留字外加 let 和 yield 作為編程時(shí)的參考。

在實(shí)現(xiàn) ECMAScript 3 的 JavaScript 引擎中使用關(guān)鍵字作標(biāo)識(shí)符,會(huì)導(dǎo)致“ Identifier Expected”錯(cuò)誤。而使用保留字作標(biāo)識(shí)符可能會(huì)也可能不會(huì)導(dǎo)致相同的錯(cuò)誤,具體取決于特定的引擎。

第 5 版對(duì)使用關(guān)鍵字和保留字的規(guī)則進(jìn)行了少許修改。關(guān)鍵字和保留字雖然仍然不能作為標(biāo)識(shí)符使用,但現(xiàn)在可以用作對(duì)象的屬性名。一般來(lái)說(shuō),最好都不要使用關(guān)鍵字和保留字作為標(biāo)識(shí)符和屬性名,以便與將來(lái)的 ECMAScript 版本兼容。

除了上面列出的保留字和關(guān)鍵字, ECMA-262 第 5 版對(duì)eval和arguments還施加了限制。在嚴(yán)格模式下,這兩個(gè)名字也不能作為標(biāo)識(shí)符或?qū)傩悦?,否則會(huì)拋出錯(cuò)誤。

3.3 變量

ECMAScript的變量是松散類(lèi)型的,所謂松散類(lèi)型就是可以用來(lái)保存任何類(lèi)型的數(shù)據(jù)。換句話說(shuō)每個(gè)變量?jī)H僅是一個(gè)用于保存值的占位符而已。定義變量時(shí)要使用var 操作符(var 是一個(gè)關(guān)鍵字),后跟變量名(即一個(gè)標(biāo)識(shí)符)。

如:var message; 這行代碼定義了一個(gè)名為 message 的變量,該變量可以用來(lái)保存任何值(像這樣未經(jīng)過(guò)初始化的變量,會(huì)保存一個(gè)特殊的值--undefined)

初始化的過(guò)程就是給變量賦一個(gè)值那么簡(jiǎn)單。因此,可以在修改變量值的同時(shí)修改值的類(lèi)型。

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

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

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