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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...