如下内容摘自阮一峰-JavaScript-标准参考教程express
var a = 1 + 3;
1 + 3叫作表达式(expression),指一个为了获得返回值的计算式。语句和表达式的区别在于,前者主要为了进行某种操做,通常状况下不须要返回值;后者则是为了获得返回值,必定会返回一个值。凡是 JavaScript 语言中预期为值的地方,均可以使用表达式。好比,赋值语句的等号右边,预期是一个值,所以能够放置各类表达式。code
变量是对“值”的具名引用。变量就是为“值”起名,而后引用这个名字,就等同于引用这个值。变量的名字就是变量名。教程
var a = 1;
上面的代码先声明变量a,而后在变量a与数值1之间创建引用关系,称为将数值1“赋值”给变量a。之后,引用变量名a就会获得数值1。最前面的var,是变量声明命令。它表示通知解释引擎,要建立一个变量a。ip
变量的声明和赋值,是分开的两个步骤,上面的代码将它们合在了一块儿,实际的步骤是下面这样。it
var a; a = 1;
变量提高io
JavaScript 引擎的工做方式是,先解析代码,获取全部被声明的变量,而后再一行一行地运行。这形成的结果,就是全部的变量的声明语句,都会被提高到代码的头部,这就叫作变量提高(hoisting)。console
console.log(a); var a = 1;
上面代码首先使用console.log方法,在控制台(console)显示变量a的值。这时变量a尚未声明和赋值,因此这是一种错误的作法,可是实际上不会报错。由于存在变量提高,真正运行的是下面的代码function
var a; console.log(a); a = 1;
最后的结果是显示undefined,表示变量a已声明,但还未赋值。 变量
-->只有在行首,才会被当成单行注释,不然会看成正常的运算。循环
function countdown(n) { while (n --> 0) console.log(n); } countdown(3) // 2 // 1 // 0
*else代码块老是与离本身最近的那个if语句配对。
var m = 1; var n = 2; if (m !== 1) if (n === 2) console.log('hello'); else console.log('world'); 上面代码不会有任何输出,else代码块不会获得执行,由于它跟着的是最近的那个if语句,至关于下面这样。 if (m !== 1) { if (n === 2) { console.log('hello'); } else { console.log('world'); } }
若是想让else代码块跟随最上面的那个if语句,就要改变大括号的位置。
if (m !== 1) { if (n === 2) { console.log('hello'); } } else { console.log('world'); } // world
*须要注意的是,每一个case代码块内部的break语句不能少,不然会接下去执行下一个case代码块,而不是跳出 switch结构。
var x = 1; switch (x) { case 1: console.log('x 等于1'); case 2: console.log('x 等于2'); default: console.log('x 等于其余值'); } // x等于1 // x等于2 // x等于其余值
上面代码中,case代码块之中没有break语句,致使不会跳出switch结构,而会一直执行下去。正确的写法是像下面这样。
switch (x) { case 1: console.log('x 等于1'); break; case 2: console.log('x 等于2'); break; default: console.log('x 等于其余值'); }
*须要注意的是,switch语句后面的表达式,与case语句后面的表示式比较运行结果时,采用的是严格相等运算符(===),而不是相等运算符(==),这意味着比较时不会发生类型转换。
var x = 1; switch (x) { case true: console.log('x 发生类型转换'); default: console.log('x 没有发生类型转换'); } // x 没有发生类型转换
(条件) ? 表达式1 : 表达式2
上面代码中,若是“条件”为true,则返回“表达式1”的值,不然返回“表达式2”的值。
var msg = '数字' + n + '是' + (n % 2 === 0 ? '偶数' : '奇数');
*break语句用于跳出代码块或循环
var i = 0; while(i < 100) { console.log('i 当前为:' + i); i++; if (i === 10) break; }
*continue语句用于当即终止本轮循环,返回循环结构的头部,开始下一轮循环。
var i = 0; while (i < 100){ i++; if (i % 2 === 0) continue; console.log('i 当前为:' + i); }
上面代码只有在i为奇数时,才会输出i的值。若是i为偶数,则直接进入下一轮循环。
*若是存在多重循环,不带参数的break语句和continue语句都只针对最内层循环。
JavaScript 语言容许,语句的前面有标签(label),至关于定位符,用于跳转到程序的任意位置,标签的格式以下。
**label: 语句**
标签一般与break语句和continue语句配合使用,跳出特定的循环
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); } } // i=0, j=0 // i=0, j=1 // i=0, j=2 // i=1, j=0
上面代码为一个双重循环区块,break命令后面加上了top标签(注意,top不用加引号),知足条件时,直接跳出双层循环。若是break语句后面不使用标签,则只能跳出内层循环,进入下一次的外层循环。
continue语句也能够与标签配合使用。
top: for (var i = 0; i < 3; i++){ for (var j = 0; j < 3; j++){ if (i === 1 && j === 1) continue top; console.log('i=' + i + ', j=' + j); } } // i=0, j=0 // i=0, j=1 // i=0, j=2 // i=1, j=0 // i=2, j=0 // i=2, j=1 // i=2, j=2