摘要:模板語法四種詞法定義二空白符號(hào)空白符號(hào)分類或稱是,是縮進(jìn)符,字符串中寫的。注意換行符會(huì)影響的兩個(gè)重要語法特性自動(dòng)插入分號(hào)和規(guī)則。
筆記說明
重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱:kaimo313@foxmail.com。一、JavaScript 的詞法(lexical grammar)
ECMAScript 源碼文本會(huì)被從左到右掃描,并被轉(zhuǎn)換為一系列的輸入元素,包括 token、控制符、行終止符、注釋和空白符。ECMAScript 定義了一些關(guān)鍵字、字面量以及行尾分號(hào)補(bǔ)全的規(guī)則。
可以參考MDN文檔--詞法文法
1.1、分類WhiteSpace 空白字符
LineTerminator 換行符
Comment 注釋
Token 詞
IdentifierName 標(biāo)識(shí)符名稱:典型案例就是使用的變量名,注意這里關(guān)鍵字也包含在內(nèi)。
Punctuator 符號(hào):使用的運(yùn)算符和大括號(hào)等符號(hào)。
NumericLiteral 數(shù)字直接量:就是寫的數(shù)字。
StringLiteral 字符串直接量:就是用單引號(hào)或者雙引號(hào)引起來的直接量。
Template 字符串模板:用反引號(hào) ` 括起來的直接量。
1.2、特別之處1、除法和正則表達(dá)式?jīng)_突問題
JavaScript 不但支持除法運(yùn)算符 / 和 /= ,還支持用斜杠括起來的正則表達(dá)式 /.../ 。
解決方案:是定義兩組詞法,然后靠語法分析傳一個(gè)標(biāo)志給詞法分析器,讓它來決定使用哪一套詞法。
2、字符串模板
理論上, ${ } 內(nèi)部可以放任何 JavaScript 表達(dá)式代碼,而這些代碼是以 } 結(jié)尾的,也就是說,這部分詞法不允許出現(xiàn) } 運(yùn)算符。
// `Hello, ${world}`
3、四種詞法定義
InputElementDiv
InputElementRegExp
InputElementRegExpOrTemplateTail
InputElementTemplateTail
二、空白符號(hào) Whitespace 2.1、空白符號(hào)分類
注意:換行符會(huì)影響 JavaScript 的兩個(gè)重要語法特性:自動(dòng)插入分號(hào) 和 no line terminator規(guī)則。
四、注釋 Comment// 多行注釋 /* MultiLineCommentChars */ // 單行注釋 // SingleLineCommentChars五、標(biāo)識(shí)符名稱 IdentifierName
IdentifierName可以以美元符$,下劃線_或者 Unicode 字母開始,除了開始字符以外,還可以使用 Unicode 中的連接標(biāo)記、數(shù)字、以及連接符號(hào)。
關(guān)鍵字
await break case catch class const continue debugger default delete do else export extends finally for function if import ininstance of new return super switch this throw try typeof var void while with yield
// 為了未來使用而保留的關(guān)鍵字 enum // 在嚴(yán)格模式下還有 implements package protected interface private public
NullLiteral(null)和 BooleanLiteral(true false) 也是保留字。
僅當(dāng)不是保留字的時(shí)候,IdentifierName會(huì)被解析為Identifier。
六、符號(hào) Punctuator{ ( ) [ ] . ... ; , < > <= >= == != === !== + - * % ** ++ -- << >> >>> & | ^ ! ~ && || ? : = += -= *= %= **= <<= >>= >>>= &= |= ^= => / /= }七、數(shù)字直接量 NumericLiteral
JavaScript 規(guī)范中規(guī)定的數(shù)字直接量可以支持四種寫法:十進(jìn)制數(shù)、二進(jìn)制整數(shù)、八進(jìn)制整數(shù)和十六進(jìn)制整數(shù)。
1、十進(jìn)制的 Number 可以帶小數(shù),小數(shù)點(diǎn)前后部分都可以省略,但是不能同時(shí)省略
.01 // 0.01 12. // 12 12.01 // 12.01
2、12.toString() 為什么會(huì)報(bào)錯(cuò)?
12.toString() // Uncaught SyntaxError: Invalid or unexpected token // 原因: `12.` 會(huì)被當(dāng)做省略了小數(shù)點(diǎn)后面部分的數(shù)字而看成一個(gè)整體,相當(dāng)于執(zhí)行了12toString(),所以會(huì)報(bào)錯(cuò) // 解決:加入空格讓其多帶帶成為一個(gè) token 12 .toString() // "12" // 或者加一個(gè). 12..toString() // "12"
另外科學(xué)計(jì)數(shù)法跟進(jìn)制就不寫了。。。。
八、字符串直接量 StringLiteral// 雙引號(hào) " DoubleStringCharacters " // 單引號(hào) " SingleStringCharacters "8.1、單字符轉(zhuǎn)義
即一個(gè)反斜杠 后面跟一個(gè)字符這種形式。九、正則表達(dá)式直接量 RegularExpressionLiteral
正則表達(dá)式由 Body 和 Flags 兩部分組成
/RegularExpressionBody/g
其中 Body 部分至少有一個(gè)字符,第一個(gè)字符不能是 (因?yàn)?/ 跟多行注釋有詞法沖突)。
十、字符串模板 Template在 JavaScript 詞法中,包含 ${ } 的 Template,是被拆開分析的
`a${b}c$i2g2s2ie` /* // 被拆成了五個(gè)部分 `a${ // 這個(gè)被稱為模板頭 b // 普通標(biāo)識(shí)符 }c${ // 被稱為模板中段 d // 普通標(biāo)識(shí)符 }e` // 被稱為模板尾 */
模板支持添加處理函數(shù)的寫法,這時(shí)模板的各段會(huì)被拆開,傳遞給函數(shù)當(dāng)參數(shù):
function kaimo(){ console.log(arguments); } var temp = "kaimo" kaimo`hello ${temp} !` // [["hello ", " !"], "kaimo"]個(gè)人總結(jié)
看著這些頭都大了。。。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/104348.html
摘要:模板語法四種詞法定義二空白符號(hào)空白符號(hào)分類或稱是,是縮進(jìn)符,字符串中寫的。注意換行符會(huì)影響的兩個(gè)重要語法特性自動(dòng)插入分號(hào)和規(guī)則。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱...
摘要:模板語法四種詞法定義二空白符號(hào)空白符號(hào)分類或稱是,是縮進(jìn)符,字符串中寫的。注意換行符會(huì)影響的兩個(gè)重要語法特性自動(dòng)插入分號(hào)和規(guī)則。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱...
摘要:實(shí)現(xiàn)狀態(tài)機(jī)可能產(chǎn)生四種輸入元素,其中只有兩種,狀態(tài)機(jī)的第一個(gè)狀態(tài)就是根據(jù)第一個(gè)輸入字符來判斷進(jìn)入了哪種狀態(tài)用函數(shù)表示狀態(tài),用表示狀態(tài)的遷移關(guān)系,用值表示下一個(gè)狀態(tài)。運(yùn)行狀態(tài)機(jī)輸出結(jié)果四語法分析語法分析根據(jù)每一個(gè)產(chǎn)生式來寫一個(gè)函數(shù)。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)...
閱讀 2007·2023-04-25 16:53
閱讀 1448·2021-10-13 09:39
閱讀 615·2021-09-08 09:35
閱讀 1650·2019-08-30 13:03
閱讀 2129·2019-08-30 11:06
閱讀 1839·2019-08-30 10:59
閱讀 3197·2019-08-29 17:00
閱讀 2296·2019-08-23 17:55