《JavaScript权威指南》读书笔记(2)-词法结构
JavaScript词法结构
字符集
概述
JavaScript程序是用Unicode字符集编写的。Unicode是ASCII和Latin-1的超集,并支持地球上几乎所有在用的语言。
虽然HTML并不区分大小写(XHTML区分大小写),但是JavaScript区分大小写。HTML中的标签和属性名在JavaScript必须是小写。eg,HTML中onclick可以写作onClick,但在JavaScript中必须为小写的onclick。
JavaScript可以识别并忽略标识之间的空格,有普通的空格符和标识空白的字符,除此以外,大多数时候也会忽略换行符,eg. 水平制表符(\u0009)、垂直制表符(\u000B)、换页符(\u00A0)等。
Unicode格式控制字符(Cf类),比如“从右至左书写标记”和“从左至右书写标记”,控制着文本的视觉显示,可以用在JavaScript中的注释、字符串直接量和正则表达式直接量中,但不能用在标识符中。(ex. 零宽连接符(\u200D)和零宽非连接符(\uFEFF)是可以出现在标识符中的,但不能作为标识符的首字符)
Ps:Cf类是Unicode中的一种“通用类别值”,指代那些影响文本布局或文本处理操作但通常不会呈现的格式字符。
Unicode转义字符
JavaScript定义了一种特殊序列,使用6个ASCII字符来表示任意16位Unicode内码。即\uXXXX(XXXX为四个十六进制数,即0-9和大写或小写的A-F表示)。这种Unicode转义写法可以用在JavaScript可以用在JavaScript字符串直接量、正则表达式直接量、标识符(关键字除外)和注释中。eg,字符é的Unicode转义写法为\u00E9,即:
"café" == "caf\u00e9" //true
注释
JavaScript支持两种格式的注释。
注释的内容会被JavaScript解释器忽略掉,不会执行。
//注释1
/*注释2*/
/*注释3
可以多行注释
*/
直接量
JavaScript中,数字、小数、字符串文本、布尔值、正则表达式都是直接量。
标识符和保留字
和其他任何编程语言一样,JavaScript 保留了一些标识符为自己所用。
JavaScript 同样保留了一些关键字,这些关键字在当前的语言版本中并没有使用,但在以后 JavaScript 扩展中会用到。
JavaScript 标识符必须以字母、下划线(_)或美元符($)开始。
后续的字符可以是字母、数字、下划线或美元符(数字是不允许作为首字符出现的,以便 JavaScript 可以轻易区分开标识符和数字)。
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 |
保留字
以下表格来自转载
ECMA-262 描述了一组具有特定用途的关键字。这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。
按照规则,关键字也是语言保留的,不能用作标识符。
以下就是ECMAScript的全部关键字(带*号上标的是第5 版新增的关键字):
| break | do | instanceof | typeof |
|---|---|---|---|
| case | else | new | var |
| catch | finally | return | void |
| continue | for | switch | while |
| debugger* | function | this | with |
| default | if | throw | delete |
| in | try |
ECMA-262 还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用途。但它们有可能在将来被用作关键字。以下是ECMA-262 第3 版定义的全部保留字:
| abstract | enum | int | short |
|---|---|---|---|
| boolean | export | interface | static |
| byte | extends | long | super |
| char | final | native | synchronized |
| class | float | package | throws |
| const | goto | private | transient |
| debugger | implements | protected | volatile |
| double | import | public |
第5 版把在非严格模式下运行时的保留字缩减为下列这些:
| class | enum | extends | super |
|---|---|---|---|
| const | export | import |
在严格模式下,第5 版还对以下保留字施加了限制:
| implements | package | public | interface |
|---|---|---|---|
| private | static | let | protected |
| yield |
可选的分号
JavaScript使用(;)将语句分隔开,但通常可以省略语句之间的分号(程序结尾或右花括号“}”之前的分号也可以省略)。
个人觉得还是加上分号好一些,可以防止出现一些意想不到的意外。
eg.
return
true;
//JavaScript会解析成return; true;
//而代码本意为return true;
x
++
y
//这段代码将解析成x;++y
//而不是x++;y

浙公网安备 33010602011771号