犀牛书精简【一】JavaScript语言核心——词法结构

337 阅读3分钟

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

字符集

  • 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;