《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
posted @ 2018-08-29 14:42  jeffmeoi  阅读(67)  评论(0)    收藏  举报