编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序,它规定了诸如变量名是什么样的、怎么写注释,以及程序语句之间如何分隔等规则。
字符集
- JavaScript程序是用Unicode字符集编写的
- 在JavaScript中是区分大小写的,所有的关键字、变量、函数名和所有的标识符都必须采取一致的大小写形式
- 空格、换行符、格式控制符
//空格符
//普通空格符(\u0020)、水平制表符(\u009)、垂直制表符(\u000B)……
// JavaScript中行为结束符
// 换行符(\u000A)、回车符(\u000D)、行分隔符(\u2028)、段分隔符(\U2029)
// Unicode格式控制符 (CF)*影响文本布局或草错但是通常不会显示
// 从右至左解析(\u200F)、从左至右解析(\u200E)……
- Unicode转义序列:以\u为前缀,其后跟随4个十六位进制数,可以用在字符串、正则表达式直接量和标识符中
"café" === "caf\u009"; //true
注释
JavaScript支持两种格式的注释。在”//“之后的文本都会被当作注释,在 /* 与 */ 之间的文本也会被当作注释并且可以跨行书写,但不能有嵌套的注释。
直接量(literal)
所谓直接量,就是程序中直接使用的数据值:
12 //数字
"hello world" //字符串
true //boolren
/javascript/gi //正则表达式直接量
{x:1,y:2} //对象
标识符
标识符就是一个名字:在JavaScript中,标识符用来对变量和函数进行命名,或者用做JavaScript代码中某些循环语句中的跳转位置的标记。JavaScript标识符必须以字母、下划线、或者 $ 开始
允许使用Unicode字符集中单Mn类、Mc类、Pc类,以下都是可以的
var i,my_name,v13,_dummy,$str;
var sí = true;
var π = 3.14;
注意:JavaScript中关键字不可作为标识符为自己使用。
保留字
JavaScript中把一些标识符拿出来用作自己的关键字。因此,就不能再在程序中把这些关键字用做标识符了
| break | delete | function | return | typeof |
| case | do | if | switch | var |
| catch | else | in | this | void |
| continue | false | instanceof | throw | while |
| debugger | finally | new | true | with |
| default | for | null | try |
严格模式下的保留字如下 其中arguments、eval不完全是保留字,但是不能用作变量名、函数名或参数名
| implements | let | private | public | yield | 其中arguments |
| interface | package | protected | static | eval |
在JavaScript中所有的java关键字都是保留字在ECMAScript5中放宽了限制,但如果需要兼容则需避免使用
JavaScript中预定义的全局变量和函数也应该避免当作变量名和函数名:
| arguments | encodeURI | Infinty | Number | RegExp |
| Array | encodeRUIComponent | 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中如果语句各自独占一行,通常可以省略语句之间的分隔号
- 风格一:使用分号来明确标记语句的结束,即使在并不完全需要的时候也是如此
- 风格二:在任何可以省略的地方都将其省略,只有在不得不用的时候才使用分号
//JavaScript并不是所有换行处都会自动添加分号,只有在缺少了分号就无法正常解析代码的时候,才会填补分号,例:
var a
a
=
3
//解析为 var a; a=3;
var y = x + f
(a+b).toString();
//解析为 var y = x+f(a+b).toString();
如果当前语句和下一行语句无法合并解析,JavaScript则在第一行后填补分号,这是通用规则,但有两个例外
- 涉及return、break、continue语句的场景中
return
true;
解析成:return; true;
- 涉及++、--运算符时
x
++
y
解析为:x;++y;