在JavaScript中,每个语句(statement)以分号结尾;若分号前无内容,则会被视为空语句。
声明变量使用的var
关键字。
在JavaScript中,变量名是区分大小写的。
若只声明变量而没有为其赋值,则该变量的值为undefined
,表示“无定义”。
若变量既没有声明也没有赋值,则会报错。
可以同时声明多个变量,例如:var a, b, c;
。
若使用var重新声明一个已存在的变量,则第二次声明是无效的;但若被赋了新值,则会覆盖掉前面的值。
若没有声明变量直接赋值,虽然语句也是有效的,但是却创建了一个全局变量,建议使用var
关键字进行创建。
JavaScript是一种动态类型语言,变量类型没有限制,变量可以随时更改类型。
var a=1; a="hello";//第二次赋值不需要使用var关键字
JavaScript引擎工作方式:先解析代码,在获取所有被声明的变量后再逐行运行。因此所有变量的声明语句,都会被提升到代码的头部,这被称为变量提升(hoisting)。举个例子
console.log(a); var a=1;
上面的代码并不会报错,因为运行代码实际为:
var a; console.log(a); a=1;
显然控制台输出结果为:undefined
。
常见的标识符(identifier)如变量名和函数名。
标识符的命名规则:
$
)和下划线(_
);JavaScript还有一些保留字,不能用作标识符:
arguments
、break
、case
、catch
、class
、const
、continue
、debugger
、default
、delete
、do
、else
、enum
、eval
、export
、extends
、false
、finally
、for
、function
、if
、implements
、import
、in
、instanceof
、interface
、let
、new
、null
、package
、private
、protected
、public
、return
、static
、super
、switch
、this
、throw
、true
、try
、typeof
、var
、void
、while
、with
、yield
。
单行注释:用//
开头;多行注释:/*... */
。
我们通常使用大括号将多个相关语句组合在一起,并称之为区块(block)。
对于var命令来说,JavaScript区块不构成单独的作用域(scope),我们在代码区块中定义并赋值的变量依然可以直接在区块外部依然有效,可以直接使用。
{ var a =1; } a //这里a的值为1
在JavaScript中很少单独使用区块,区块往往用来构成其他更复杂的语法结构,例如for、if、while、function等。
语法如下:布尔值往往由一个表达式产生的,必须放于圆括号中。
if(布尔值) 语句;//也可以写在一行
if(布尔值){ //满足条件时执行的代码 }else{ //不满足条件时执行的代码 }
若对同一变量进行多次判断,多个if…else语句可以连写在一起:
注意:
else
代码块总是与离自己最近的那个if
语句配对,可以利用大括号将结构写明确。
if (条件判断1) { // ... } else if (条件判断2) { // ... } else if (条件判断3) { // ... } else { // ... }
语法:(条件) ? 表达式1 : 表达式2
,若为真则返回表达式1的值,否则返回表达式2的值。这个三元运算符可以被视为if...else...
的简写形式。举例:三元运算符可以用于输出相应提示。
var msg = '数字' + n + '是' + (n % 2 === 0 ? '偶数' : '奇数');
当多个if…else连在一起使用时,则更推荐使用switch结构,如下所示:根据变量的值执行相应的case
,当所有case
都不符合时,则执行最后的default
部分。
注意:这里switch后的变量和case的值在比较时执行的是严格相等运算符(
===
),并不是相等运算符(==
),这就意味着不会发生类型转换,例如1和true比较,1并不会转为true。
switch(变量){ case "值1": //... break; case "值2": //... break; ... default: //... }
每个case
代码块内部的break
语句不能少,否则会接下去执行下一个case
代码块,而不是跳出switch
结构。
While
语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。
while (条件){ 语句;//简单句子可以省略大括号,甚至写一行也可以 }
for
语句是循环命令的另一种形式,可以指定循环的起点、终点和终止条件。
注意:若将初始表达式、条件和递增/减表达式三部分都省略,则会导致无限循环。
for (初始化表达式; 条件; 递增/减表达式) { 语句 }
do...while
循环与while
循环类似,唯一的区别就是先运行一次循环体,然后判断循环条件。
注意:
while
语句后面的分号注意不要省略。
do { 语句 } while (条件);
break
语句用于跳出代码块或循环。
continue
语句会立即终止本轮循环,返回循环结构的头部,开始下一轮循环。
注意:若存在多重循环,则不带标签的
break
语句和continue
语句都只针对最内层循环。
语句前面的标签(label)可以当作定位符,用于标识程序的跳转的特定位置,可用于跳出循环或代码块。
如下代码所示:break
后加了top
标签,满足条件时,直接跳出双层循环。
top: for (var i = 0; i < 3; i++){ for (var j = 0; j < 3; j++){ if (i === 1 && j === 1) break top; console.log('i=' + i + ', j=' + j); } }
当然,break
和continue
后都可以加标签进行特定跳转。