JavaScript基础学习之-JavaScript权威指南-第二章词法结构

一、字符集

unicode字符集编写,几乎支持地球上所有语言。

区分大小写的语言总结:
区分:

  1. js
  2. java
  3. jsp
  4. c,c++
  5. xhtml

不区分:

  1. html
  2. css,但是一般采用小写,多个字符用下划线连接。

js会忽略换行,空格,注意格式控制符。

二、注释

注释和C,C++中的注释一样

三、直接量

四、标记符和保留字

标示符字母、数字、下划线、$组成,其中数字不能为首
javascript保留字、ECMA扩展保留的关键字、javascript预定义的全局变量名或函数名。

javascript保留字:真正意义上的保留字(关键字)
ECMA扩展保留的关键字:结合java、C++等面向对象语言的思路,将来有可能新加入的关键字
javascript预定义的全局变量名或函数名:javascript语言中提供的有用的常用的变量和函数
这几个知识点一般是按照字母顺序给出,但我觉得有时候不容易记住,所以按它们的功能进行了小归类:

(1)javascript保留字

if分支语句:if, else switch分支语句:switch, case, default, break 循环语句:do,
while, for, continue 异常处理语句:try, catch, finally, throw 获取类型:typeof,
instanceof 布尔值:true, false, null 函数相关:var, void, function, return
其他:in, this, with, new, delete (2)ECMA扩展保留的关键字

基本数据类型:byte, char, boolean, int, short, long, float, double, enum
继承:implements, extends, super 类与接口:class, interface
用来修饰函数的关键字:abstract, native, static, final, const, volatile,
synchronized 导入导出:export, import 访问权限:private, protected, public
其他:goto, package, throws, transient, debugger
(3)javascript预定义的全局变量名或函数名

数据类型:Number, Boolean, String, undefined, Object, Array, Function,
Date, Math, RegExp,
Error 错误类型:EvalError, RangeError, ReferenceError,
SyntaxError, TypeError,
URIError 编码:decodeURI, decodeURIComponent,
encodeURI 转义:escape, unescape 类型转换:parentInt, parentFloat
特殊值及判断:isFinite, isNaN, NaN, Infinity 其他:arguments, eval
最后注意:我们常用的函数alert()不属于上面的三类。

五、可选分号

  • JavaScript使用分号(;)将语句分隔开。

  • 在JavaScript中,如果语句各自独占一行,通常可以省略语句之间的分号(程序结尾或右花括号“}”之前的分号也可以省略)。

  • 另一种风格就是,在任何可以省略分号的地方都将其省略,只有在不得不用的时候才使用分号。

考虑如下代码,因为两条语句用两行书写,第一个分号是可以省略掉的:

a = 3;
b = 4;

如果按照如下格式书写,第一个分号则不能省略掉:

a = 3; b = 4;

需要注意的是,JavaScript并不是在所有换行处都填补分号:只有在缺少了分号就无法正确解析代码的时候,JavaScript才会填补分号。换句话讲(类似下面代码中的两处异常),如果当前语句和随后的非空格字符不能当成一个整体来解析的话,JavaScript就在当前语句行结束处填补分号。看一下如下代码:

var a

a =

3
console.log(a)

JavaScript将其解析为:

var a; a = 3; console.log(a);

JavaScript给第一行换行处添加了分号,因为如果没有分号,JavaScript就无法解析代码var a a。第二个a可以单独当做一条语句“a;”,但JavaScript并没有给第二行结尾填补分号,因为它可以和第三行内容一起解析成“a=3;”。

这些语句的分隔规则会导致一些意想不到的情形,这段代码写成了两行,看起来是两条独立的语句:

var y = x + f
(a+b).toString()

但第二行的圆括号却和第一行的f组成了一个函数调用,JavaScript会把这段代码看做:

var y = x + f(a+b).toString();

而这段代码的本意并不是这样。为了能让上述代码解析为两条不同的语句,必须手动填写行尾的显式分号。

通常来讲,如果一条语句以“(”、“[”、“/”、“+”或“-”开始,那么它极有可能和前一条语句合在一起解析。以“/”、“+”和“-”开始的语句并不常见,而以“(”和“[”开始的语句则非常常见,至少在一些JavaScript编码风格中是很普遍的。有些程序员喜欢保守地在语句前加上一个分号,这样哪怕之前的语句被修改了、分号被误删除了,当前语句还是会正确地解析:

var x = 0 // 这里省略了分号
;[x,x+1,x+2].forEach(console.log) // 前面的分号保证了正确地语句解析

如果当前语句和下一行语句无法合并解析,JavaScript则在第一行后填补分号,这是通用规则。但有两个例外。
第一个例外是在涉及return、break和continue语句(参见第5章)的场景中。如果这三个关键字后紧跟着换行,JavaScript则会在换行处填补分号。例如,这段代码:

return
true;
JavaScript会解析成:
return; true;
而代码的本意是这样:
return true;

也就是说,在return、break和continue和随后的表达式之间不能有换行。如果添加了换行,程序则只有在极特殊的情况下才会报错,而且程序的调试非常不方便。

第二个例外是在涉及“++”和“--”运算符(见4.8节)的时候。这些运算符可以作为表达式的前缀,也可以当做表达式的后缀。如果将其用做后缀表达式,它和表达式应当在同一行。否则,行尾将填补分号,同时“++”或“--”将会作为下一行代码的前缀操作符并与之一起解析,例如,这段代码:

x
++
y

这段代码将解析为“x; ++y”,而不是“x++; y”。

你可能感兴趣的:(JavaScript)