亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Javascript核心讀書有感之詞法結構

2019-11-20 13:15:37
字體:
來源:轉載
供稿:網友

編程語言的詞法結構是一套基礎性的規則,用來描述你如何編寫這門語言。作為語法的基礎,它規定了變量名是怎么樣的,如何寫注釋,以及語句之間是如何區分的。本節用很短的篇幅來介紹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)?;剀嚪訐Q行符在一起唄解析為一個單行的結束符。

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支持兩種注釋方式,在行尾"http://"之后的文本都會被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中,各自語句獨占一行,通??梢允÷哉Z句之間的分號(程序結尾處使用“}”花括弧之前的分號也可以省略)。很多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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性猛交xxxx乱大交极品| yw.139尤物在线精品视频| 日韩激情第一页| 国产精品观看在线亚洲人成网| 清纯唯美亚洲激情| 92国产精品久久久久首页| 国产精品高精视频免费| 欧美交受高潮1| 久久亚洲国产成人| 亚洲欧美日韩爽爽影院| 久久视频在线观看免费| 国产精品久久久久久久久| 2018中文字幕一区二区三区| 亚洲国产精品成人av| 亚洲天堂av在线免费| 中文字幕欧美精品日韩中文字幕| 国产精品久久视频| 亚洲人成在线免费观看| 一本色道久久综合亚洲精品小说| 亚洲三级黄色在线观看| 成人疯狂猛交xxx| 国模精品视频一区二区三区| 日韩精品视频中文在线观看| 日韩欧美综合在线视频| 97国产精品免费视频| 亚洲国产精品成人va在线观看| 欧美亚洲一级片| 亚洲字幕在线观看| 在线观看成人黄色| 日韩视频在线一区| 国产精品一区二区久久久久| 欧美xxxx14xxxxx性爽| 日韩精品在线免费| 久久91亚洲人成电影网站| 国产91精品不卡视频| 久久成人综合视频| 在线激情影院一区| 欧美亚洲一级片| 国产精品久久久久久久9999| 国产精品mp4| 日韩欧美在线视频免费观看| 国内外成人免费激情在线视频| 韩日欧美一区二区| 中文日韩在线视频| 国产a∨精品一区二区三区不卡| 国产狼人综合免费视频| 欧美日韩国产成人| 欧美国产日韩一区二区在线观看| 色妞在线综合亚洲欧美| 爽爽爽爽爽爽爽成人免费观看| 国产欧美日韩专区发布| 亚洲成色www8888| 国产亚洲在线播放| 深夜精品寂寞黄网站在线观看| 91精品中国老女人| 日韩的一区二区| 欧美日韩亚洲一区二区| 国产精品高清免费在线观看| 91大神在线播放精品| 亚洲尤物视频网| 日韩av中文字幕在线播放| 日韩专区在线播放| 国产精品成人观看视频国产奇米| 国模精品视频一区二区三区| 国产精品久久久久久久久借妻| 欧美激情第三页| 91高清免费在线观看| 亚洲欧洲美洲在线综合| 欧美成人小视频| 国产精品丝袜一区二区三区| 国产精品极品美女在线观看免费| 亚洲一区二区三| 成人欧美在线视频| 成人免费视频网| 国产精品人成电影| 69国产精品成人在线播放| 国产三级精品网站| 国产自产女人91一区在线观看| 精品视频www| 亚洲欧美一区二区三区情侣bbw| 欧美成人精品三级在线观看| 欧美日韩亚洲精品内裤| 色诱女教师一区二区三区| 91亚洲精品在线观看| 91av在线播放视频| 亚洲3p在线观看| 视频一区视频二区国产精品| 亚洲人高潮女人毛茸茸| 国产成人精品免高潮在线观看| 中文字幕在线成人| 欧美激情综合亚洲一二区| 国产精品久久久久久久久久久久久久| 高清一区二区三区四区五区| 亚洲成人久久一区| 欧美在线免费看| 国产成人久久久精品一区| 午夜精品一区二区三区视频免费看| 自拍偷拍亚洲区| 国产成人精彩在线视频九色| 亚洲精选在线观看| 亚洲精品电影网| 国产精品一区二区久久| 少妇激情综合网| 国产成人精品久久二区二区91| 久久深夜福利免费观看| 国产精品在线看| 美女视频久久黄| 成人国产精品久久久久久亚洲| 国产精品视频xxx| 久久久人成影片一区二区三区观看| 久久成人精品一区二区三区| 久久成人综合视频| 3344国产精品免费看| 中文日韩在线观看| 国产视频精品在线| 亚洲丝袜一区在线| 欧美性猛交xxxxx免费看| 日韩精品视频在线播放| 欧美电影免费观看高清完整| 北条麻妃一区二区在线观看| 久久视频在线观看免费| 国产精品白嫩美女在线观看| 亚洲视频在线免费观看| 亚洲色图狂野欧美| 亚洲一区二区三区xxx视频| 国产精品国语对白| 久久影视电视剧免费网站清宫辞电视| 亚洲一区二区三区四区在线播放| 97精品伊人久久久大香线蕉| 亚洲第一区中文字幕| 国产亚洲视频中文字幕视频| 在线视频欧美日韩精品| 日韩精品久久久久久久玫瑰园| 综合国产在线视频| 欧美视频免费在线| 色噜噜亚洲精品中文字幕| 欧美国产亚洲视频| 国产乱肥老妇国产一区二| 欧美性猛交视频| 国产成人aa精品一区在线播放| 成人福利免费观看| 日本一区二三区好的精华液| 国产精品视频男人的天堂| 久久久久久久久爱| 日本精品一区二区三区在线| 国产精品久久久久久久久久久久久| 日韩经典中文字幕在线观看| 91sao在线观看国产| 中文字幕日韩视频| 欧美激情二区三区| 最新国产成人av网站网址麻豆| 91久久精品国产91性色| 精品国产鲁一鲁一区二区张丽| 久久精品久久久久久国产 免费| 九九热精品视频国产| 日韩风俗一区 二区| 欧美黑人一区二区三区| 自拍偷拍亚洲在线| 日本午夜精品理论片a级appf发布| 亚洲人成电影网| 国产久一一精品| 成人97在线观看视频| 国产精品福利小视频| 亚洲综合在线中文字幕|