语法精粹
1、空白
空白可能表现为被格式化的字符或注释,空白通常没有意义,但有时候必须用它来分隔字符序列,否则字符序列会被合成一个符号、字符,发生错误。如:在声明一些变量、函数时,
var a = 12;
var myName = "Tom";
function Sum () {};
其中,"var"和"a"、"var"和"myName"、"function"和"Sum"之间的空白是不能移除的,如果移除,就会使其成为字符,语法就会发生错误。其它的空白可以移除的,不过,为了使代码格式清晰、易读,建议还是在心要的地方使用空白符。
我们知道JavaScript提供了两种注释形式:
一种是使用/* 注释语句*/包围的块级注释,
一种使用//为开头的行注释。注释应该被优先用来提高程序的可读、易读性。没有用的注释比没有注释的代码更糟糕。其中,注释也应该使用简洁的语言来描述当前某段代码的意义。
对于第一种以/* */表示的块注释,这种注释形式来自于一门叫PL/I的语言,这种语言选择那些不常见的符号对作为注释的符号标志,因为除了可能出现在 字符串字面量之外,它们不大可能出现在这门语言的程序中,但对于JavaScript而言,这些那些符号对可能会出现在正则表达式字面量中,所以如果用块注释的话,对被注释的代码块来说有时是不安全的。如:
/*
var pattrn = /a*/.match(s);
*/
这段代码会导致一个语法错误。所以,建议避免使用/* */形式的注释,使用//形式的注释来替代它。
标识符
标识符用于对变量或函数的命名,有时也用作JavaScript语句中的循环语句中的 跳转位置 的标记。
标识符由字母、数字、下划线、美元符号($)组成,
但不能以数字开头。
为了代码的可移植性和可易写性,建议使用 字母和数字 来书写标识符,当然不能以数字开头。标识符不能使用 保留字 来命名。
标识符被用于语句、变量、函数、参数、运算符和标记。
数字
JavaScript中的数字(Number类型)分为整数和浮点数。整数有八进制、十进制和十六进制。
浮点数是以科学计数法的形式表示的,如:0.5e4表示0.5乘以10的4次方。
除了整数和浮点数外,在JavaScript中,NaN表示一个非数值,它是一个特殊的值,它表示的是
不能产生 正常结果 的运算结果,即表示
原本该返回数值的操作数而并未返回数值的结果。
任何涉及NaN的操作都会返回NaN,NaN与任何值都不相等,包括本身。
console.log(10*NaN);//返回NaN
console.log(NaN == NaN); 返回false
可以使用isNaN()来检测NaN值。
Infinity表示无穷大的数值,无穷大有正无穷和负无穷之分。
字符串
字符串字面量被包在一对单引号或双引号中,它可以包含0个或多个字符。在字符串中,"\"表示的是转义字符。
JavaScript没有字符类型,因此要表示一个字符,只需要创建一个包含一个字符的字符串即可。
var a = "g"; //表示一个字符
字符串一旦被创建,则永远无法改变它。但可以通过"+"连接运算符连接其它字符串形成新的字符串。两个包含相同字符的且字符顺序相同的字符串被认为是相同的字符串,如:
"t" + "r" + "u" + "e" === "true"; //返回true
length属性可以表示一个字符串的长度。
语句
在代码末尾加上";"分号就是一段语句。
一个编译单元包含一组可执行的语句。在web浏览器中,<script>标签提供一个被编译且立即执行的编译单元。
当 var 语句被用在函数内部时,它定义的是这个函数的私有变量。
语句通过按照从上到下的顺序执行。JavaScript可通过条件语句(if语句和switch语句)、循环语句(if语句、while语句、do-while语句)、强制跳转语句(break语句、return语句、throw语句)和函数调用 来改变语句的执行顺序。
代码块是被包含在一对花括号中的一组语句。
if语句通过表达式的值来改变语句的执行流程,如果表达式的值为true,则执行后面花括号里面的代码,如果表达式的值为false,则执行else后面花括号里面的代码。
被当作false的值有:
false
null
空字符串" "
数字0
NaN
undefiend
除了以上的其它值被当作true。包括true、字符串"false"和所有对象。
for、while、do-while语句表示循环语句。
try语句执行一个代码块,并捕获该代码块中的任何异常,catch语句中的var变量来接收这个异常对象。
try {
//某段语句
} catch () {
var a = +"异常对象:" + message;
}
throw语句会抛出一个异常,它的表达式通常是一个对象字面量,它包含一个name属性和一个message属性,这两个属性包含异常的信息。
return语句会导致从一个函数中提前返回,也可以指定要返回的值,如果没有指定要返回的值,则返回undefiend。注:return语句后面的语句则不会执行了,因为已经从函数中提前返回了。
特别注意:JavaScript不允许在return关键字和表达式之间换行,因为这样的话,引擎会自动在return后面添加";"分号,会抛出错误。
function sum (a, b) {
return
a + b;
};
这样的话,引擎会认为是:
function sum (a, b) {
return;
a + b;
}
直接返回undefined,并且"a + b"这段代码也不会执行。
break语句会使程序退出一个循环语句(也就是结束循环)或switch语句。它可以指定一个可选的标签,那么退出的循环就是带有该标签的循环语句。
continue语句是使程序结束本次循环,开始下一次的循环。
表达式
一个最简单的
表达式有:
字面量值(字符串、数字)、变量、内置的值(ture/false/undefined/null/NaN/Infinity)、new开头调用的表达式、属性提取表达式、包在圆括号中的表达式、以前置运算符开头的表达式、表达式后面跟着:
1、一个中置运算符与一个表达式
2、三元运算符
3、一个属性提取表达式
运算符优先级别:
. [] () > new typeof + - ! > * / % > + - > (>= <= > <) > === !== > && > || > ?:
字面量
对象字面量
对象字面量量一种可以方便地按指定规格创建对象的方法。属性名可以是标识符或字符串。这名字被当作字面量名看待而不是变量名。属性的值就是表达式。
数组字面量
数组字面量量一种可以方便地按 指定规格 创建数组的方法。
函数
由事件触发,可以重复执行的代码段。