DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> Javascript核心讀書有感之詞法結構
Javascript核心讀書有感之詞法結構
編輯:關於JavaScript     

編程語言的詞法結構是一套基礎性的規則,用來描述你如何編寫這門語言。作為語法的基礎,它規定了變量名是怎麼樣的,如何寫注釋,以及語句之間是如何區分的。本節用很短的篇幅來介紹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é" === "caf\u00e9" => 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編碼符風格中是很常見的。有點程序員喜歡保守的在語句前邊加上一個分號,這樣,哪怕之前的語句被修稿了,分號被誤刪了,當前語句還是會正確的解析;
如果當前語句和下一行語句無法合並解析。javascript則在第一行後填補分號,這是通用規則,但有兩個列外。第一個例外是涉及到returnm,birak,he continue語句,如果這三個關鍵字後緊跟著換行。javascript則會在換行處填補分號。例如

例如

return
true;
而 javascript解析成

return;ture;
而代碼的本意是

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

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

代碼如下:
x
++
yy

以上代碼解析為

代碼如下:
 x;
++y

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved