Cocos Creator_JavaScript权威指南(第六版)_第2章_词法结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39710961/article/details/81136077

编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序。作为语法的基础,它规定了诸如变量名,注释,以及程序语句之间如何分隔等规则。

2.1 字符集
JavaScript程序是用Unicode字符集编写的。Unicode是ASCII和Lation-1的超集,并支持地球上几乎所有在用的语言。ECMAScript3要求JavaScript的现实必须支持Unicode2.1及后续版本,ECMAScript5则要求支持Unicode3及后续版本。

2.1.1 区分大小写
JavaScript是区分大小写的语言。但是需要注意的是,HTML并不区分大小写(尽管XHTML区分大小写)。

2.1.2 空格、换行符和格式控制符
多数情况下,JavaScript会忽略程序中标识之间的空格。由于可以在代码中随意使用空格和换行,因此可以采用整齐、一致的缩进来形成统一的编码风格,从而提高代码的可读性。

JavaScript会忽略程序中标识(token)之间的空格。多数情况下会忽略换行符。由于可以在代码中随意使用空格和换行,因此可以采用整齐、一致的缩进来形成统一的编码风格,从而提高代码的可读性。
除了可以识别普通的\0u0020 空格 还可以识别如下这些表示空格的字符:\u0009 水平制表符 \u000B 垂直制表符 \u000C 换页符 \u00A0 不中断空白 \uFEFF 字节序标记 以及在Unicode中所有Zs类别(即是其中一种类别值,特指没有标志符号但不属于控制或格式字符的空格字符。更多类别值的描述请参见http://www.unicode.org/reports/tr44)的字符,JavaScript将如下字符识别为行结束符:\u000A 换行符 \u000D 回车符 \u2028 行分隔符 \u2029 段分隔符 回车符加换行符在一起被解析为一个单行结束符(即换行符+空格) Unicode格式控制字符(Cf类 指代那些影响文本布局或文本处理操作但通常不会呈现的格式字符)\u200F 从右至左书写标记 \u200E 从左至右书写标记 控制着文本的视觉显示,这对于一些非英语文本(这是区别于双向字符集语言,字符是带有方向的,比如在阿拉伯语言中,标点位于单词的左侧,而不是我们通常熟悉的右侧。)的正确显示来说是至关重要的,但不能用在标识符(比如,变量名)中。但有个例外,\u200D 零宽连接符 \uFEFF 零宽非连接符 (指没有宽度的不可见连接符,在蒙文、满文、锡伯文等少数民族语言中会使用到) 是可以出现在标识符中的,但不能作为标识符的首字符。 \uFEFF 字节序标记格式控制符被当成了空格来对待。
这里写图片描述

2.1.3 Unicode转义序列
转义序列:在有些计算机硬件和软件里,无法显示或输入Unicode字符全集。为了支持那些使用老旧技术的程序员。JavaScript定义了一种特殊序列,使用6个ASCII字符来代表任意16位Unicode内码。这些Unicode转义序列均以\u为前缀,其中跟随4个十六进制数(使用数字以及大写或小写的字母A~F表示)。这种Unicode转义写法可以用在JavaScript字符串直接量、正则表达式直接量和标识符中(关键字除外)。
Unicode转义写法也可以出现在注释中,但由于JavaScript会将注释忽略,它们只是被当成上下文中的ASCII字符处理,而且并不会被解析为其对应的Unicode字符。

2.1.4 标准化
Unicode允许使用多种方法对同一个字符进行编码。Unicode标准为所有字符定义了一个首选的编码格式,并给出了一个标准化的处理方式将文本转换为一种适合比较的标准格式,JavaScript会认为它正在解析的程序代码已经是这种标准格式,不会再对其标识符,字符串或正则表达式作标准化处理。

2.2 注释
JavaScript支持两种格式的注释。//之后的文本都会被JavaScript当做注释忽略掉。此外,/* */之间的文本也会当做注释,这种注释可以跨行书写,但不能有嵌套的注释。

2.3 直接量
就是程序中直接使用的数据值。

2.4 标识符和保留字
标识符:
标识符就是一个名字。在JavaScript中,标识符用来对变量和函数进行命名,或者用做JavaScript代码中某些循环语句中的跳转位置的标记。JavaScript标识符必须以字母、下划线或美元符开始。后续的字符可以是字母、数字、下划线或美元符(数字是不允许作为首字符出现的,以便JavaScript可以轻易区分开标识符和数字)。此外出于可移植性和易于书写的考虑,也可以使用非英语语言或数字符号来书写标识符。

保留字:

break delete function return typeof case do if switch var catch else in this void continue false unstanceof throw while debugger finally new true with default for null try
ECMAScript 5 保留了这些关键字:
class const enum export extends import super
此外,下面这些关键字在普通的JavaScript代码中是合法的,但是在严格模式下是保留字:
implements let private public yield interface package protected static
严格模式同样对下面的标识符的使用做了严格限制,它们并不完全是保留字,但不能用做变量名、函数名或参数名:
arguments 对象 eval串演算指令
ECMAScript 3将Java的所有关键字都列为自己的保留字,尽管这些保留字在ECMAScript 5中放宽了限制,但如果你希望代码能在基于ECMAScript 3实现的解释器上运行的话,应当避免使用这些关键字作为标识符:
abstract抽象 double两倍 goto转到 native本地的 static静态 boolean布尔 enum枚举 implements工具 package打包 super超级 byte字节 export输出 import输入 private私有的 synchronized关键字,同步 char字符型 extends继承,扩展 int整数 protected受保护的 throws投 class类 final最后 interface界面 public公用的 transient短暂的 const常数 float使漂浮 long长时间 short短的 volatile不稳当的

JavaScript预定义了很多全局变量和函数,应当避免把他们的名字用作变量名和函数名:
arguments参数 encodeURI编码 Infinity无穷大 Number数字 RegExp正则表达式 Array数组 encodeURIComponent中文 isFinite 无穷的 Object对象 String字符串 Boolean布尔 Error错误 isNaN测试是否为非数值若 parseFloat字符串 SyntaxError句法错误 Date日期 eval验算 JSON数据 parseInt转换数据 TypeError类型错误 decodeURI方法 EvalError全局错误 Math数学 RangeError引用错误 undefined不明确的 decodeURIComponent方法组件 Function功能 NaN非数值 ReferenceError引用错误 URIError编码错误

JavaScript的具体实现可能定义独有的全局变量和函数,每一种特定的JavaScript运行环境(客户端、服务器端等)都有自己的一个全局属性列表。这一点是需要牢记的。

2.5 可选的分号
JavaScript使用分号将语句分隔开。这对增强代码的可读性和整洁性是非常重要的:缺少分隔符,一条语句的结束就成了下一条语句的开始,反之亦然。在JavaScript中,如果语句各自独占一行,通常可以省略语句之间的分号(程序结尾或右花括号“}”之前的分号也可以省略)。许多JavaScript程序员使用分号来明确标记语句的结束,即便在并不完全需要分号的时候也是如此。另一种风格就是,在任何可以省略分号的地方都将其省略,只有在不得不用的时候才使用分号。不管采用哪种变成风格,关于JavaScript中可选分号的问题有几个细节需要注意。

a = 1;
b = 2;
第一个分号可以省略
a = 1 ; b = 2;
第一个分号怎不能省略。

JavaScript并不是在所有换行处都填补分号:只有在缺少了分号就无法正确解析代码的时候,JavaScript才会填补分号。换句话讲,如果当前语句和随后的非空格字符不能当成一个整体来解析的话,JavaScript就在当前语句行结束处填补分号。

基于分号可以省略的原因,我们可以在每句语句前加上一个分号,这样哪怕之前的语句被修改了、分号被误删除了,当前语句还是会正确地解析。

var x = //这里省略了分号
;[x,x+1,x+2].forEach(console.log)//前面的分号保证了正确地语句解析

如果当前语句和下一行语句无法合并解析,JavaScript则在第一行后填补分号,这是通用规则,但有两个例外。第一个例外是在涉及return、breaker和continue语句的场景中。如果这是三个关键字后紧跟着换行,JavaScript则会在换行处填补分号。例如下:
return
true;
JavaScript会解析成:
return;true;
而代码的本意是这样:
return true;
也就是说,在reture、break和continue和随后的表达式之间不能有换行。如果添加了换行,程序则只有在极特殊的情况下才会报错,而且程序的调试非常不方便。
第二个例外是在涉及“++”和“–”运算符的时候。这些运算符可以作为表达式的前缀,也可以当做表达式的后缀。如果将其用做后缀表达式,它和表达式应当在同一行。否则,行尾将填补分号,同时“++”或“–”将会作为下一行代码的前缀操作符并与之一起解析,例如,这段代码:
x
++
y
将解析为“x;++y”,而不是“x++;y”

猜你喜欢

转载自blog.csdn.net/qq_39710961/article/details/81136077
今日推荐