热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ECMAScript6词法

ES6简介ECMAScript6.0(简称ES6)是JavaScript语言的下一代标准,它于2015年6月正式发布。ECMAScript
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::WhiteSpaceLineTerminatorCommentCommonTokenDivPunctuatorRightBracePunctuator
InputElementRegExp::WhiteSpaceLineTerminatorCommentCommonTokenRightBracePunctuatorRegularExpressionLiteral
InputElementRegExpOrTemplateTail::WhiteSpaceLineTerminatorCommentCommonTokenRegularExpressionLiteralTemplateSubstitutionTail
InputElementTemplateTail::WhiteSpaceLineTerminatorCommentCommonTokenDivPunctuatorTemplateSubstitutionTail

 

格式控制字符

    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::IdentifierNamePunctuatorNumericLiteralStringLiteralTemplate

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::IdentifierStartIdentifierNameIdentifierPart
IdentifierStart::UnicodeIDStart$_\UnicodeEscapeSequence
IdentifierPart::UnicodeIDContinue$_\UnicodeEscapeSequence
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::KeywordFutureReservedWordNullLiteralBooleanLiteral

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

 

转:https://www.cnblogs.com/mufc-go/p/7886527.html



推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
author-avatar
111222
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有