欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間: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的實(shí)現(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會(huì)忽略程序中的標(biāo)示(token)之間的空格,多數(shù)情況下,javascript同樣會(huì)忽略換行符。由于可以在代碼中隨意使用空格和換行符,一次可以采用整齊和一致的縮進(jìn)來形成統(tǒng)一的編碼風(fēng)格,提高代碼的可讀性。

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

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

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

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

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

iiii標(biāo)準(zhǔn)化

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

2.注釋

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

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

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

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

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

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

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

4.標(biāo)識符和保留字

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

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

my_variable_name
            b13
            _dummy
            $str

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

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

var sá = true;
            var π = 3.14;

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

復(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中是合法的,但在嚴(yán)格模式下是保留字

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

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

5.可選的分號

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

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

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

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

var a;a=3;console.log(a);
javascript給第一行處添加了分號,如果沒有分號,javascript就無法解析代碼中的var a a。第二個(gè)a可以單獨(dú)當(dāng)做一條語句“a;”,但javascript沒有給第二行結(jié)尾處填補(bǔ)分號。因?yàn)樗梢院偷谌袃?nèi)容一起解析成"a=3;" .

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

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

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

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

例如

return
true;
而 javascript解析成

return;ture;
而代碼的本意是

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

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

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

x
++
yy

以上代碼解析為

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

 x;
++y

相關(guān)文章

最新評論