亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript核心讀書有感之詞法結(jié)構(gòu)

 更新時間:2015年02月01日 17:04:41   投稿:hebedich  
這篇文章主要介紹了Javascript核心讀書有感之詞法結(jié)構(gòu),需要的朋友可以參考下

編程語言的詞法結(jié)構(gòu)是一套基礎(chǔ)性的規(guī)則,用來描述你如何編寫這門語言。作為語法的基礎(chǔ),它規(guī)定了變量名是怎么樣的,如何寫注釋,以及語句之間是如何區(qū)分的。本節(jié)用很短的篇幅來介紹javascript的詞法結(jié)構(gòu)。

1.字符集

javascript程序是用Unicode字符集編寫的,Unicode是ASCII和Latin-1的超集,并支持地區(qū)上幾乎所有的語言。ECMAscript3要求javascript的實現(xiàn)必須支持Unicode2,1及后續(xù)版本,ECMAscript5則要求支持Unicode3及后續(xù)版本

i.區(qū)分大小寫

javascript是區(qū)分大小寫的語言,也就是說關(guān)鍵字、變量、函數(shù)名和所有的表述字符都必須采用一致的大小寫 ,比如關(guān)鍵字while必須寫成while,不能寫成While或者WHILE。

但需要注意的是html并不區(qū)分大小寫(盡管xhtml區(qū)分),由于它和客戶端javascript聯(lián)系緊密,因此很容易混淆。例如在html設(shè)置的處理事件中,onclick屬性可以寫成onClick,但在javascript中編寫寫成小寫的onclick。

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

javascript會忽略程序中的標示(token)之間的空格,多數(shù)情況下,javascript同樣會忽略換行符。由于可以在代碼中隨意使用空格和換行符,一次可以采用整齊和一致的縮進來形成統(tǒng)一的編碼風(fēng)格,提高代碼的可讀性。

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

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

iii.Unicode轉(zhuǎn)義序列

在有些計算機硬件和軟件里,無法顯示或輸入Unicode字符全集。為了支持哪些使用老舊技術(shù)的程序員,javascript定義了一種特殊序列,使用6個ASCII字符來代表任意16位的Unicode內(nèi)碼。這些Unicode轉(zhuǎn)義序列以\u為前綴,其后跟隨十六進制鼠(使用數(shù)字以及大小寫字母A-F表示)。這種Unicode轉(zhuǎn)義寫法可以用在javascript字符串直接量、正則表達式之江路和標示符中(關(guān)鍵字除外)。例如字符é的Unicode轉(zhuǎn)義寫法為\u00E9,如下兩個Javascript字符串完全是一樣的。

    "café" === "caf\u00e9" => true
Unicode轉(zhuǎn)義寫法可以出現(xiàn)在注釋中,但是由于javascript會將注釋忽略,他們只是被當(dāng)成成上下文中的ascii字符處理,并不會接下到對于的Unicode字符

iiii標準化

Unicode允許使用多種方法對同一個字符進行編碼。比如字符é可以使用Unicode字符\u00E9,也可以使用普通的ascii字符e跟隨一個語調(diào)符號\u0301 ,在文本編輯器中,這兩個編碼顯示的結(jié)果是一摸一樣的,但是它們的二進制編碼表示是不一樣的,在計算機里也不相等。Unicode標準為索引字符定義了一個首選的代碼格式,并給出了一個標準化的處理方式將文本轉(zhuǎn)化為一種適合比較的標準格式,不會再對其它表示、字符串或者正則表達式做標準化處理。

2.注釋

javascript支持兩種注釋方式,在行尾"http://"之后的文本都會被javascript當(dāng)做注釋忽略掉的。
此外/*和*/之間的文本也會當(dāng)做注釋。這種注釋可以跨行書寫,但不能有嵌套注釋。

//單行注釋
/*
*
*
*
*/
3.直接量

所謂直接量(literal),就是程序中直接使用的數(shù)據(jù)值,下面列出直接量

復(fù)制代碼 代碼如下:

        12 //數(shù)字
             1.2 //小數(shù)
                "Hllo World" //字符串文本
            'hi' //另一個字符串
            true //布爾值
             false //布爾值
                / javascript / gi //正則表達式直接量(用做模式匹配)
             null //空

第3章會詳細講解數(shù)字和字符串直接量。正則表達式直接量會在第10章講解。更多福祉的表達式,可以寫成數(shù)組或?qū)ο笾苯恿俊?/p>

              {x:1,y:2} //對象
            [1,2,3,4,5] //數(shù)組

4.標識符和保留字

標識符就是一個名字。在javascript中,標識符用來對變量和函數(shù)進行命名,或者用做javascript代碼中某些循環(huán)語句中的跳轉(zhuǎn)位置的標記。javascript標識符必須以字母。下劃線、或者美元符號開始。后續(xù)的字符可以是字母。數(shù)字。下劃線或者美元符號(數(shù)字是不許作為首字母出現(xiàn)的,一遍javascript可以輕易區(qū)分開標識符和數(shù)字)、下面是合法的標識符

復(fù)制代碼 代碼如下:

my_variable_name
            b13
            _dummy
            $str

處于可移植性和易于書寫的考慮,通常我們只使用只使用ASCII字母和數(shù)字來書寫標識符。然后需要注意的是,javascript允許標識符中出現(xiàn)Unicode字符全集中的字母和數(shù)字(從技術(shù)來將ECMAScript允許在標識符的首字符后面出現(xiàn)Unicode字符機制的Mn類,Mc類和P才類)、因此,程序員可以使用非英語的語言或者數(shù)學(xué)符號來書寫標識符

復(fù)制代碼 代碼如下:

var sá = true;
            var π = 3.14;

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

復(fù)制代碼 代碼如下:

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
另外,這些關(guān)鍵字在普通的javascript中是合法的,但在嚴格模式下是保留字

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

arguments eval
javascript的具體實現(xiàn)可能定義獨有的全局變量和函數(shù),每一種特定的javascript運行環(huán)境(客戶端)服務(wù)器等都有自己的一個全局屬性列表,這一點是需要牢記的。(window對象來了解客戶端javascript中定義全局變量和函數(shù)列表)

5.可選的分號

和很多編程語言一樣,javascript使用分號(;)將語句分隔開。這對增強代碼的可讀性和整潔性是非常重要的,缺少分隔符一條語句結(jié)束就成了下一條語句的開始,反之亦然。
在javascript中,各自語句獨占一行,通??梢允÷哉Z句之間的分號(程序結(jié)尾處使用“}”花括弧之前的分號也可以省略)。很多javascript程序員(包括本書的代碼示例)都是使用分號來明確標記語句的結(jié)束,即使在并不完全需要分號的時候也是如此,另一種風(fēng)格是在任何可以省略分號時都將其省略,只有在不得不使用的時候才使用分號,不管哪種編程風(fēng)格,關(guān)于javascript有幾個細節(jié)需要注意。
如下代碼,第一個分號是可以省略的

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

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

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

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

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

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

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

通常來講,如果一條語句以 ( [ / + -開始,那么它極有可能和前條語句組合在一起解析,以/ + -開始的語句不很常見,但以( [開始的語句則非常常見。至少在一些javascript編碼符風(fēng)格中是很常見的。有點程序員喜歡保守的在語句前邊加上一個分號,這樣,哪怕之前的語句被修稿了,分號被誤刪了,當(dāng)前語句還是會正確的解析;
如果當(dāng)前語句和下一行語句無法合并解析。javascript則在第一行后填補分號,這是通用規(guī)則,但有兩個列外。第一個例外是涉及到returnm,birak,he continue語句,如果這三個關(guān)鍵字后緊跟著換行。javascript則會在換行處填補分號。例如

例如

return
true;
而 javascript解析成

return;ture;
而代碼的本意是

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

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

復(fù)制代碼 代碼如下:

x
++
yy

以上代碼解析為

復(fù)制代碼 代碼如下:

 x;
++y

相關(guān)文章

最新評論