首頁 >web前端 >js教程 >Javascript核心讀書有感之詞法結構_基礎知識

Javascript核心讀書有感之詞法結構_基礎知識

WBOY
WBOY原創
2016-05-16 16:16:241166瀏覽

程式語言的詞法結構是一套基礎性的規則,用來描述你如何寫這門語言。作為語法的基礎,它規定了變數名稱是怎麼樣的,如何寫註釋,以及語句之間是如何區分的。本節用很短的篇幅來介紹javascript的詞法結構。

1.字符集

javascript程式是用Unicode字元集寫的,Unicode是ASCII和Latin-1的超集,並支援地區上幾乎所有的語言。 ECMAscript3要求javascript的實作必須支援Unicode2,1及後續版本,ECMAscript5則要求支援Unicode3及後續版本

i.區分大小寫

javascript是區分大小寫的語言,也就是說關鍵字、變數、函數名稱和所有的表述字元都必須採用一致的大小寫 ,例如關鍵字while必須寫成while,不能寫成While或WHILE。

但要注意的是html並沒有區分大小寫(儘管xhtml區分),由於它和客戶端javascript聯繫緊密,因此很容易混淆。例如在html設定的處理事件中,onclick屬性可以寫成onClick,但在javascript中寫寫成小寫的onclick。

ii空格、換行符、和格式控制器

javascript會忽略程式中的標示(token)之間的空格,多數情況下,javascript同樣會忽略換行符。由於可以在程式碼中隨意使用空格和換行符,一次可以採用整齊和一致的縮進來形成統一的編碼風格,提高程式碼的可讀性。

javascript除了辨識空格符(u0020)。 javascript也師表如下標示空格的字元:水平製表符(u0009)、垂直製表符(u000B)、換頁符(u000C)、不中斷空白符號(u00A0)、位元組序標記(uFEFF),以及在Unicode中所有Zs類別的字元。 javascript將以下字元辨識為結束符號:換行符號(u000A),回車符號(u000D),行分隔符號(u2028),段分隔符號(u2029)。回車符加換行符在一起唄解析為一個單行的結束符。

Unicode格式控製字元(Cf類),例如「從右至左書寫標記」(u200F)和從「從左到右書寫標記」(u200E),控制著文字的視覺顯示。這對一些非英語文本的正確顯示來說是至關重要的,這些字符可以在javascript的註釋,字符串直接量和正則表達式直接量中,但不能用在標示符(比如,變量名)中,但有個例外零寬連接符號(u200D)和零寬非連接符號(uFEFF)是可以出現在標示符中,但不能作為標識符的手字元。上文也提到了,字節序標記格式控制符(uFEFF)被當成了空格來對待

iii.Unicode轉義序列

在有些電腦硬體和軟體裡,無法顯示或輸入Unicode字元全集。為了支援哪些使用老舊技術的程式設計師,javascript定義了一種特殊序列,使用6個ASCII字元來代表任意16位元的Unicode內碼。這些Unicode轉義序列以u為前綴,其後跟隨十六進位鼠(使用數字以及大小寫字母A-F表示)。這種Unicode轉義寫法可以用在javascript字串直接量、正規表示式之江路和標示符中(關鍵字除外)。例如字元é的Unicode轉義寫法為u00E9,如下兩個Javascript字串完全是一樣的。

    "café" === "cafu00e9" => true
Unicode轉義寫法可以出現在註解中,但由於javascript會將註解忽略,他們只是被當成成上下文中的ascii字元處理,並不會接下到對於的Unicode字元

iiii標準化

Unicode允許使用多種方法對同一個字元進行編碼。例如字元é可以使用Unicode字元u00E9,也可以使用普通的ascii字元e跟隨一個語調符號u0301 ,在文字編輯器中,這兩個編碼顯示的結果是一摸一樣的,但是它們的二進位編碼表示是不一樣的,在計算機裡也不相等。 Unicode標準為索引字元定義了一個首選的程式碼格式,並給出了一個標準化的處理方式將文字轉換為適合比較的標準格式,不會再對其它表示、字串或正規表示式做標準化處理。

2.註

javascript支援兩種註解方式,在行尾"//"之後的文字都會被javascript當做註解忽略掉的。
此外/*和*/之間的文字也會當做註解。這種註釋可以跨行書寫,但不能有巢狀註釋。

//單行註解
/*
*
*
*
*/
3.直接量

所謂直接量(literal),就是程式中直接使用的資料值,以下列出直接量

複製程式碼 程式碼如下:

        12 //數字
             1.2 //小數
                "Hllo World" //字串文字
            'hi' //另一字串
            true //布林值
             false //布林值
                / javascript / gi //正規表示式直接量(使用模式符合)
             null //空

第3章會詳細講解數字和字串直接量。正規表示式直接量會在第10章講解。更多福祉的表達式,可以寫成陣列或物件直接量。

              {x:1,y:2} //物件
            [1,2,3,4,5] //陣列

4.識別字與保留字

標識符就是一個名字。在javascript中,標識符用來對變數和函數進行命名,或用做javascript程式碼中某些循環語句中的跳轉位置的標記。 javascript標識符必須以字母。底線、或美元符號開始。後續的字元可以是字母。數字。底線或美元符號(數字是不准作為首字母出現的,一遍javascript可以輕易區分開識別符和數字)、下面是合法的標識符

複製程式碼 程式碼如下:

my_variable_name
            b13
            _dummy
            $str

處於可移植性和易於書寫的考慮,通常我們只使用只使用ASCII字母和數字來書寫標識符。然後要注意的是,javascript允許標識符中出現Unicode字元全集中的字母和數字(從技術來將ECMAScript允許在標識符的首字符後面出現Unicode字符機制的Mn類,Mc類和P才類)、因此,程式設計師可以使用非英語的語言或數學符號來書寫識別符

複製程式碼 程式碼如下:

var sá = true;
            var π = 3.14;

javascript把一些識別符拿出來自己用做關鍵字,因此名就不能再在程式中把這些關鍵字用做標示符了。

複製程式碼 程式碼如下:

break
case
catch
continue
default
delete
do
else
finally
for
function
if
in
instanceof
new
return
switch
this
throw
try
typeof
var
void
while
with

javascript保留字

class const enum export
export extends import super
另外,這些關鍵字在普通的javascript中是合法的,但在嚴格模式下是保留字

implements let private public yield interface package
    protected static
同樣嚴格模式下對下面的識別符做了嚴格的限制,但不能做變數名、參數名和函數名。

arguments eval
javascript的具體實作可能定義獨有的全域變數和函數,每一種特定的javascript運行環境(客戶端)伺服器等都有自己的一個全域屬性列表,這一點是需要牢記的。 (window物件來了解客戶端javascript定義全域變數和函數列表)

5.可選的分號

跟許多程式語言一樣,javascript使用分號(;)將語句分隔開。這對增強程式碼的可讀性和整潔性是非常重要的,缺少分隔符號一條語句結束就成了下一條語句的開始,反之亦然。
在javascript中,各自語句獨佔一行,通常可以省略語句之間的分號(程式結尾處使用「}」花括弧之前的分號也可以省略)。許多javascript程式設計師(包括本書的程式碼範例)都是使用分號來明確標記語句的結束,即使在並不完全需要分號的時候也是如此,另一種風格是在任何可以省略分號時都將其省略,只有在不得不使用的時候才使用分號,不管哪種程式設計風格,關於javascript有幾個細節需要注意。
如下碼,第一個分號是可以省略的

a=3;
b=4;
但如果依照以下格式書寫,第一個分號則不能省略。

a=3;b=4;
要注意的是,javascript並不是在所有的換行處都填補分號:只有在缺少了分號就無法正常解析程式碼的時候,javascript才會填補分號,換句話說(類似下面程式碼中的兩處異常),如果當前的語句和隨後的非空格字元不能當成一個整體解析的話,javascript就在當前語句的結束處來填補分號,看下如下程式碼

        var a
        a
        =
        3
        console.log(a)
javascript將其解析為

var a;a=3;console.log(a);
javascript為第一行加了分號,如果沒有分號,javascript就無法解析程式碼中的var a a。第二個a可以單獨當做一條語句“a;”,但javascript沒有給第二行結尾處填補分號。因為它可以和第三行內容一起解析成"a=3;" .

有些語句的分隔規則會導致一些想不到的情形,這頓斷碼分成了兩行,看起來是兩條獨立的語句。

             var y = x f
            (a b).toString()
第二行的圓括號卻和第一行的f組成了一個函數調用,javascript會把這段程式碼看做

var y = x f(a b).toString();
顯然程式碼的本意不是這樣,為了能讓上述程式碼解析成兩個不同的語句,必須手動填入行為的顯示分號

通常來講,如果一條語句以( [ / -開始,那麼它極有可能和前條語句組合在一起解析,以/ -開始的語句不很常見,但以( [開始的語句則非常常見。會正確的解析;
如果目前語句和下一行語句無法合併解析。 javascript則在第一行後面填分號,這是通用規則,但有兩個欄位外。第一個例外是涉及returnm,birak,he continue語句,如果這三個關鍵字後面緊跟著換行。 javascript則會在換行處填補分號。例如

例如

return
true;
而 javascript解析成

return;ture;
而程式碼的本意是

    return ture;
也就是說return,break,contuine好的隨後的表達式之間不能有換行,如果加入了換行,程式則在極有特殊情況才能報錯。而且程式的調試很不方便。

第二個例子是涉及到 --運算子時,這些表達式符號可以代表標識符表達式的前綴和後綴。如果將其又再後表達式,如果的將其用做後綴表達式。它和表達式應該要看做一行。否則行尾將填補分號。

複製程式碼 程式碼如下:

x

yy

以上程式碼解析為

複製程式碼 程式碼如下:

 x;
y
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn