词法

大凡语言,不管是人类使用的自然语言还是计算机使用的程序语言,基本单位都是一个个的单词,不同的语言有着不同的单词库和构词规则,即为词法。
本文基于ECMAScript5语言规范对JavaScript语言的词法进行说明。

 

概述

如下例所示,程序的源代码由字符序列构成。

console.log("the program is running");

字符序列可以分解成由分隔符号分隔的一组标记(token)序列。 标记(Token)相当于自然语言中的单词,是程序构成元素中的最小有意义单元。 标记(Token)再组合成表达式、语句以至整个程序。

JavaScript中的标记(token)可以分为以下几种类型:

  • 标识符
  • 常数
  • 运算符号
  • 分隔符号
  • 关键字 

上面这段代码在词法分析中即会被分解成以下多个标记(Token):

序号标记(Token)说明
1console变量标识符
2.点运算符
3log方法名标识符
4(括号运算符
5“the program is running”字符串常数
6)括号运算符
7;分隔符

下面我们先介绍一下JavaScript语言的字符集以及注释的格式,然后再对上面的各类标记(token)分别进行说明。

字符集

字符集定义了程序源代码所能使用字符的一个集合。 JavaScript程序内部采用Unicode字符集、其脚本文件需保存为utf8格式。

注释

注释用来在源码中增加解释性的信息,可以帮助阅读和理解源码。 有两种生成注释的方法。

  • 第一种是单行注释,使用//

    ,会将该行中符号以后的文本都视为注释。

  • 第二种是多行注释,使用/* */

    ,其包括的文本无论是否跨行都视为注释。

注释本身通常并不作为标记进行处理。

标识符

标识符就是一个名字,用来对变量、常量、函数以及类型等进行命名。

标识符可以包含以下文字,但第一个文字必须是字母、下划线(_)或者美元($)符号,字母大小写区分。

  • 大写字母(A~Z)
  • 小写字母ト(a~z)
  • 数字(0~9)
  • 符号($、_)
  • Unicode转义序列

常数

常数是直接记述在源代码中的值对象,包含以下分类:

分类定义
整数常数整数值,可以是10进制、8进制、16进制或2进制形式。123、-93、+456、0xff
浮点数常数实数值,可以是指数形式123.23、-93.22、6.022e3
字符串常数由双引号(“)对或单引号(‘)对包围的零个或多个字符。”abc3d3”、'开发'
布尔值常数真伪值,只有两个:true或false。true,false
正则表达式常数正斜杠“/”围成的表达式。/ab+c/g
空常数空值,只有一个:null。null

运算符

运算符号是表示运算的一类特殊符号,例如,加号与乘号。运算符操作的值称为运算对象。 运算符号包含以下分类:

分类运算符用途
赋值=赋值x=2
+=加赋值x+=2
-=减赋值x-=2
*=乘赋值x*=2
/=除赋值x/=2
%=模赋值x%=2
&=按位与赋值赋值x&=2
|=按位或赋值x|=2
^=按位异或赋值x^=2
<<=左移赋值x«=2
>>=右移赋值x»=2
>>>=无符号右移赋值x*=2
算术+加法3+4
-减法3-4
*乘法3*4
/除法3/4
%取余3%4
++(前)自增++x
++(后)自增x++
--(前)自减–x
--(后)自减x–
-一元求反-x
-一元正号+x
关系==等于x==y
!=不等于X!=y
<小于x<y
>大于x>y
<=x⇐y
>=大于等于x>=y
===严格相等运算符x===y
!==严格非相等运算符x!==y
逻辑||逻辑或x||y
&&逻辑与x&&y
!逻辑非!x
&按位ANDx&y
|按位或ORx|y
^按位亦或XORx^y
~按位非NOT~x
<<左移x<
>>右移x>>y
>>>右移x>>>y
其他?:条件运算符x>y?3:4
,逗号var x=3,y=4;
.点运算符的左边是一个对象,右边是其成员console.log(“a”)
()括号运算符(3+4)*2
[]中括号运算符obj[“method1”]()

分隔符号

分类绑定或符号用途
结束 ;(分号)语句的结束-

关键字 

以下关键字都是保留字,不可用于变量,常量,函数,方法,或对象的标识符。

break finally this
case for throw
catch function try
continue if typeof
debugger in var
default instanceof void
delete new while
do return with
else switch-