该语言的核心
词法结构
类型,值,变量
表达式和运算符
语句
对象
数组
函数
类和模块
正则表达式
子集和扩展
服务端的ECMAScript
(这个Javascript权威指南里面的,对比官方的文档确实是重点突出,比较通俗,但少了很多细节)
词法结构
编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序,作为语法的基础,它规定诸如变量名是什么样的,怎样写注解,以及程序语句之间如何分隔等规则。
字符集
用3.0或更高版本Unicode字符编码的一个字符序列来表示ECMAScript源文本,就是说ECMAScript是用unicode字符集来编写的,unicode允许使用多种方法对同一个字符进行编码,如字符e可以用unicode字符\u00E9,也可以用普通的ASCLL字符e的语调符\u0301
空白字符
空白字符用来改善源文本的可读性和分割 tokens(不可分割的词法单位),此外就无关紧要。空白字符可以出现的两个 token 之间还可以出现在输入的开始或结束位置。空白字符,还可以出现在字符串 字面量 (StringLiteral) 或正则 表达式字面量 (RegularExpressionLiteral)( 在这里它表示组成字面量的字符 ) 或 注释 (Comment) 中,但是不能出现的其他任何 token 内。(个人理解空格)
(果然详细还得看官方文档)
字符编码值 | 名称 | 正式名称 |
---|---|---|
\u0009 | 制表符 | |
\u000B | 纵向制表符 | |
\u000C | 进纸符 | |
\u0020 | 空格 | |
\u00A0 | 非断空格 | |
\uFEFF | 位序掩码 | |
其它分类“Zs” | 其它任何Unicode"空白分隔符" |
行终结符
像空白字符一样,行终止字符用于改善源文本的可读性和分割 tokens(不可分割的词法单位)。然而,不像空白字符,行终结符对语法文法的行为有一定的影响。一般情况下,行终结符可以出现在任何两个 token 之间,但也有少数地方,语法文法禁止这样做。行终结符也影响自动插入分号过程,行终结符不能出现在 StringLiteral 之外的任何 token 内。行终结符只能出现在作为 LineContinuation 一部分StringLiteral token 里。(回车键)
字符编码值 | 名称 | 正式名称 |
---|---|---|
\u000A | 进行符 | |
\u000D | 回车符 | |
\u2028 | 行分隔符 | |
\u2029 | 段分隔符 |
注释
简单理解就是//,和/* */,分别为单行和多行注释
标识符和保留字
标识符就是一个名字,用来对变量和函数进行命名,必须以字母,下划线,美元后续的字符以字母,数字,下划线或美元符号
ECMAScript将一些标识符拿来用做自己的关键字,就不能用来做标识符
字面量
空值字面量
null
布尔值字面量
true,false
数值字面量
就是类似java里面的整数,浮点数
字符串字面量
一个字符串字面量是关闭的单引号或双引号里的零个或多个字符。每个字符都可以用一个转义序列代表。反斜杠,回车,行分隔符,段落分隔符,换行符之外的所有字符都可以直接出现的字符串字面量里。任何字符都可以通过转移序列的形式出现
就是字符串
自动分号插入
必须用分号终止某些 ECMAScript 语句 ( 空语句 , 变量声明语句 , 表达式语句 , do-while 语句 , continue 语句 , break 语句 , return 语句 ,throw 语句 )。这些分号总是明确的显示在源文本里。然而,为了方便起见,某些情况下这些分号可以在源文本里省略。描述这种情况会说:这种情况下给源代码的 token 流自动插入分号。
分号插入有三个基本规则:
- 左到右解析程序,当遇到一个不符合任何文法产生式的 token(叫做 违规 token(offending token)),那么只要满足下面条件之一就在违规 token 前面自动插入分号。
- 至少一个 LineTerminator 分割了违规 token 和前一个 token。
- 违规 token 是 }。
- 左到右解析程序,tokens 输入流已经结束,当解析器无法将输入 token 流解析成单个完整 ECMAScript 程序 ,那么就在输入流的结束位置自动插入分号。
- 左到右解析程序,遇到一个某些文法产生式允许的 token,但是此产生式是受限产生式,受限产生式的里紧跟在 no LineTerminator here 后的第一个终结符或非终结符的 token 叫做受限的 token,当至少一个 LineTerminator 分割了受限的 token 和前一个 token,那么就在受限 token 前面自动插入分号。
。。。。还是老老实实的加吧,权威指南里面也有类似的解释,管它会不会自动加上保险
区分大小写
区分大小写语言,也就是说,关键字,变量,函数名和所有标识符都必须采取一致大小写形式
(html不区分大小写)
类型
类型又分为ECMAScript语言类型与规范类型
ECMAScript语言类型是ECMAScript程序员使用ECMAScript语言直接操作对应类型,ECMAScript语言类型包括未定义(undefined),空值(null),布尔值(boolean),字符串(String),数值(number),对象(Object)
规范类型是描述ECMAScript语言构造与ECMAScript语言类型语意的算法所用的元值对应的类型.规范类型包含引用,列表,完结,属性描述式,属性标示,词法环境,环境记录。规范类型的值是不一定对应ECMAScript实现里任何实体的虚拟对象,规范类型可用来描述ECMAScript表达式运算的中途结果,但是这些值不能存成对象的变量或是ECMAScript语言变量的值
Undefined类型
undefined类型有且只有一个值称为undefined.任何没有被赋值的变量都有undefined值
Null类型
null类型有且只有一个值,称为null
Boolean类型
Boolean类型表示逻辑实体,有两个值,称为true和false
String类型
字符串类型是所有有限的零个或多个16位无符号整数值的有序序列,在运行的ECMAScript程序中,字符串类型被用于表示文本数据,此时字符串中的每个元素都被市委一个代码点
Number类型
精确地,数值类型拥有18437736874454810627个值,表示为IEEE-754 格式 64 位双精度数值,在 ECMAScript 中,它们被表示为一个单独的特殊值:NaN(非数字),还有另外两个特殊值称为正无穷和负无穷(+Infinity(简作Infinity) 和 -Infinity 产生)
Object类型
Object是一个属性的集合,每个属性既可以是一个命名的数据属性,也可以是一个命名的访问器属性,或者是一个内部属性