ECMAScript6詞法

来源:http://www.cnblogs.com/mufc-go/archive/2017/11/24/7886527.html
-Advertisement-
Play Games

ECMAScript 6.0(簡稱 ES6)是 JavaScript 語言的下一代標準,它於2015 年 6 月正式發佈。ECMAScript 和 JavaScript 的關係是,前者是後者的規格,後者是前者的一種實現。ECMAScript實現還有Jscript和ActionScript。 ...


ES6簡介

     ECMAScript 6.0(簡稱 ES6)是 JavaScript 語言的下一代標準,它於2015 年 6 月正式發佈。ECMAScript 和 JavaScript 的關係是,前者是後者的規格,後者是前者的一種實現。ECMAScript實現還有Jscript和ActionScript。

源文本(Source Text)

    ECMAScript代碼使用Unicode,8.0.0或更高版本來表示。包含U+0000至U+10FFFF的所有Unicode代碼點值。

詞法

    

SourceCharacter::
      any Unicode code point

 

note

    在Java程式中,如果Unicode轉義序列\u000A發生在單行註釋中,則將其解釋為行終止符(Unicode代碼點U + 000A為LINE FEED(LF)),因此下一個代碼點不是註釋的一部分

在ECMAScript程式中,註釋中發生的Unicode轉義序列從不被解釋

 

源代碼類型

    主要分為以下4中類型:

全局代碼(Global code)

    全局代碼(Global code)是被視為ECMAScript腳本的源文本。特定腳本的全局代碼不包括被解析為FunctionDeclaration,FunctionExpression,GeneratorDeclaration,GeneratorExpression,MethodDefinition,ArrowFunction,ClassDeclaration或ClassExpression的一部分的源文本。

Eval代碼(Eval code)

    Eval代碼(Eval code)是提供給內置eval函數的源文本。 更確切地說,如果內置eval函數的參數是一個String,那麼它被視為一個ECMAScript腳本。 eval的特定調用的eval代碼是該腳本的全局代碼部分。

函數代碼(Function code)

    函數代碼(Function code)是解析為ECMAScript函數對象的[[ECMAScriptCode]]和[[FormalParameters]]內部插槽的值的源文本。 特定ECMAScript函數的函數代碼不包括被解析為嵌套的FunctionDeclaration,FunctionExpression,GeneratorDeclaration,GeneratorExpression,MethodDefinition,ArrowFunction,ClassDeclaration或ClassExpression的函數代碼的任何源文本。

模塊代碼(Module code)

    模塊代碼(Module code)是作為ModuleBody提供的代碼的源文本。 它是在模塊初始化時直接執行的代碼。 特定模塊的模塊代碼不包括被解析為嵌套的FunctionDeclaration,FunctionExpression,GeneratorDeclaration,GeneratorExpression,MethodDefinition,ArrowFunction,ClassDeclaration或ClassExpression的一部分的任何源文本。

 

嚴格模式代碼

    全局代碼,eval代碼等包含 使用嚴格指令(Use Strict Directive)是嚴格模式代碼

    模塊代碼總是嚴格的模式代碼。

    ClassDeclaration或ClassExpression的所有部分都是嚴格的模式代碼。

輸入元素   

     ECMAScript腳本或模塊的源文本首先被轉換為一系列輸入元素,
源文本從左到右掃描,重覆地將最長可能的代碼點序列作為下一個輸入元素。

    

詞法

詞法語法的多個目標符號

    

InputElementDiv::
    WhiteSpace
    LineTerminator
    Comment
    CommonToken
    DivPunctuator
    RightBracePunctuator
InputElementRegExp::
    WhiteSpace
    LineTerminator
    Comment
    CommonToken
    RightBracePunctuator
    RegularExpressionLiteral
InputElementRegExpOrTemplateTail::
    WhiteSpace
    LineTerminator
    Comment
    CommonToken
    RegularExpressionLiteral
    TemplateSubstitutionTail
InputElementTemplateTail::
    WhiteSpace
    LineTerminator
    Comment
    CommonToken
    DivPunctuator
    TemplateSubstitutionTail

 

格式控制字元

    Unicode格式控制字元(即,Unicode字元資料庫中的類別“Cf”中的字元,),在沒有更高級別的協議(如標記語言)的情況下,控制一系列文本的格式的控制代碼。

    允許源文本中的格式控制字元有助於編輯和顯示。 所有格式控制字元可以在註釋中使用,也可以在字元串文字,模板文字和正則表達式文字中使用。

    U+200C(ZERO WIDTH NON-JOINER)和U+200D(ZERO WIDTH JOINER)是用於在以特定語言形成單詞或短語時進行必要區分的格式控制字元。 在ECMAScript源文本中,這些代碼點也可以在第一個字元之後的IdentifierName中使用。

    U+FEFF(ZERO WIDTH NO-BREAK SPACE)是一種主要用於文本開頭的格式控制字元,用於將其標記為Unicode,並允許檢測文本的編碼和位元組順序。 為此目的的字元有時也可能出現在文本開頭之後,例如連接文件的結果。 在ECMAScript源文本中,代碼點被視為空白字元

White Space

    空白代碼點用於提高源文本的可讀性,並將詞條(token)(不可分割的辭彙單位)彼此分開

Line Terminators

    像空白代碼點一樣,行終止符代碼點用於提高源文本的可讀性,並將token(不可分割的辭彙單位)彼此分開。

    行終止符可以在MultiLineComment中發生,但不能在SingleLineComment中發生。

    行終止符包含在正則表達式中由\s類匹配的一組空白代碼點中。/\s/.test("\u000a")返回true。

Comments

    註釋可以是單行還是多行。 多行註釋不能嵌套。

Tokens

    

CommonToken::
    IdentifierName
    Punctuator
    NumericLiteral
    StringLiteral
    Template

IdentifierName

    IdentifierName和 ReservedWord是根據Unicode標準附件31中標識符和模式語法給出的預設標識符語法進行解釋的token,併進行了一些小的修改。ReservedWord是IdentifierName的枚舉子集。 語法語法將Identifier定義為不是ReservedWord的IdentifierName 。

    該標準規定了特定的代碼點添加:標識符名稱中的任何地方允許使用U+ 0024(DOLLAR SIGN)和U+005F(LOW LINE),代碼點U+200C(ZERO WIDTH NON-JOINER)和U+200D(ZERO WIDTH JOINER)允許在IdentifierName的第一個代碼點之後的任何地方。

    在IdentifierName中允許使用Unicode轉義序列,它們向IdentifierName貢獻一個Unicode代碼點。 代碼點由Unicode轉義序列的16進位表示(見11.8.4)。 在Unicode轉義序列之前的\和u和{}代碼單元,如果它們出現,不貢獻代碼點到IdentifierName。 Unicode轉義序列不能用於將代碼點放入否則為非法的IdentifierName。 換句話說,如果一個\UnicodeEscapeSequence序列被SourceCharacter替換,那麼該結果仍然是一個有效的IdentifierName,它具有與原始IdentifierName完全相同的SourceCharacter元素序列。 本規範中IdentifierName的所有解釋均基於其實際代碼點,而不管轉義序列是否用於提供任何特定的代碼點。

IdentifierName::
    IdentifierStart
    IdentifierNameIdentifierPart
IdentifierStart::
    UnicodeIDStart
    $
    _
    \UnicodeEscapeSequence
IdentifierPart::
    UnicodeIDContinue
    $
    _
    \UnicodeEscapeSequence
    <ZWNJ>
    <ZWJ>
UnicodeIDStart::
    any Unicode code point with the Unicode property “ID_Start”
UnicodeIDContinue::
    any Unicode code point with the Unicode property “ID_Continue”

Reserved Words 

    保留字(reserved word)是不能用作標識符(Identifier)的IdentifierName。 
    ReservedWord定義被指定為特定SourceCharacter元素的文字序列。 ReservedWord中的代碼點不能由\ UnicodeEscapeSequence表示。

ReservedWord::
    Keyword
    FutureReservedWord
    NullLiteral
    BooleanLiteral
Keywords&Future Reserved Words

    

    在嚴格模式代碼中,implements package,Protected,interface,private,public,let和static通過靜態語義限制

Literals

    

 

Numeric Literals

    

0b101,0o72,0xabc分別是2進位,8進位,16進位數字字面量

String Literals

    字元串字面值為零或更多的Unicode代碼點,以單引號或雙引號括起來
    Unicode代碼點也可以由轉義序列表示
    U+005C(REVERSE SOLIDUS),U+000D(CARRIAGE RETURN),U+ 2028(LINE SEPARATOR),U+2029(PARAGRAPH SEPARATOR)和U+000A(LINE FEED)代碼點除外,所有代碼點可以以字元串文字形式出現

    UTF16Encoding ( cp )演算法:

    

Assert: 0 ≤ cp ≤ 0x10FFFF.
If cp ≤ 65535, return cp.
Let cu1 be floor((cp - 65536) / 1024) + 0xD800.
Let cu2 be ((cp - 65536) modulo 1024) + 0xDC00.
Return the code unit sequence consisting of cu1 followed by cu2.

 

屬於基本多語言平面的代碼點被編碼為字元串的單個代碼單元元素。 所有其他代碼點被編碼為字元串的兩個代碼單元元素。例如:

‘\u{20BB7}’

 ‘\u0005’

EscapeCharacter

    

 

同樣一個字元“|”的不同轉義字元表示:
十進位表示:'\5'  
16進位表示:'\x05'
unicode表示:'\u0005'
unicode表示:'\u{5}'

 字元串單字元轉義序列:

Regular Expression Literals

    正則表達式文字是每次執行文字時轉換為RegExp對象(參見21.2)的輸入元素。 程式中的兩個正則表達式文字作為正則表達式對象執行時,即使兩個文字的內容相同,也不會彼此比較為===。

/\d/ === /\d/

返回false

正則表達式字面量詞法:

RegularExpressionLiteral::
        /RegularExpressionBody/RegularExpressionFlags

 

正則表達式不能以* 或  \ 或 / 或 [開始,事實證明以下正則是會報語法錯誤的

/[/  
/*/

 

 

 對於[符號,是元字元,單個[需要轉義吧:

/\[/

 

除了開始位置, \ 或 / 或 [ 也是不允許直接出現,如需使用需轉義。

如果要匹配空字元串,可以使用如下正則:

/(?:)/.test('')

 

Template Literal Lexical Components

模板字面量詞法組件詞法:

 

學習詞法規範能讓我們更好地瞭解js基礎知識,如果你想瞭解全部的ECMAScript6語言規範,可以訪問github:https://github.com/zhoushengmufc/es6,或者訪問線上文檔:http://zhoushengfe.com/es6/es6-ch.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 ...
  • 閑來沒事,研究了一下多屏適配和響應式佈局的 CSS。 第一種寫法 第二種寫法 max-device-width 與 max-width 的區別 頁面示例 ...
  • 前言 上傳圖片是常見的需求,多使用input標簽。本文主要介紹 input標簽的樣式美化 和 實現圖片預覽。 用到的知識點有: 1、input標簽的使用 2、filelist對象 和 file對象 3、fileReader對象 樣式美化 原生的input標簽樣式單一,且在不同瀏覽器下的表現還不一致。 ...
  • 查看原文 ...
  • 查看原文 ...
  • 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>設計中文版式</title> 6 <style type="text/css"> 7 body{ /*頁面基本屬性*/ 8 backgrou ...
  • 【以下作品非原創,僅學慣用】 <style> html,body{ width: 100%;height: 100%;overflow: hidden; } </style></head><body> <canvas id="cav"></canvas> <script> var cav = doc ...
  • HTML 中的預留字元必須被替換為字元實體。 HTML 實體 在 HTML 中,某些字元是預留的。 在 HTML 中不能使用小於號(<)和大於號(>),這是因為瀏覽器會誤認為它們是標簽。 如果希望正確地顯示預留字元,我們必須在 HTML 源代碼中使用字元實體(character entities)。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...