1.语句
2.变量
2.1概念
2.2变量提高
3.标识符
4.注释
5.区块
6.条件语句
6.1if 结构
6.2if...else 结构
6.3switch 结构
6.4三元运算符 ?:
7.循环语句
7.1while 循环
7.2for 循环
7.3do...while 循环
7.4break 语句和 continue 语句
7.5标签(label)
参考连接express
1.语句和表达式
以分号结束的是语句,表达式加分号没有意义
语句(statement)是为了完成某任务的操做。
1 + 3叫作表达式(expression),指一个为了获得返回值的计算式app
var a = 1 + 3;3d
语句和表达式的区别在于,前者主要为了进行某种操做,通常状况下不须要返回值;后者则是为了获得返回值,必定会返回一个值。code
预期为值的地方,均可以使用表达式。好比,赋值语句的等号右边,预期是一个值,所以能够放置各类表达式。()里都是表达式ip
2.变量作用域
给值取名,而后拿来引用。
变量是对“值”的具名引用rem
var a = 1;
上面的代码先声明变量a,而后在变量a与数值1之间创建引用关系,称为将数值1“赋值”给变量ait
var,是变量声明命令。它表示通知解释引擎,要建立一个变量a。io
二次声明没用 赋值有用
var x = 1;
var x;
x // 1
var x = 1;
var x = 2;console
// 等同于
var x = 1;
var x;
x = 2;
2.1概念
2.2变量提高
JavaScript 引擎的工做方式是,先解析代码,获取全部被声明的变量,而后再一行一行地运行。
3.标识符
4.注释
须要注意的是,-->只有在行首,才会被当成单行注释,不然会看成正常的运算。
HTML 代码的注释,因此<!--和-->也被视为合法的单行注释。
x = 1; <!-- x = 2;
--> x = 3;
上面代码中,只有x = 1会执行,其余的部分都被注释掉了。
function countdown(n) {
while (n --> 0) console.log(n);
}
countdown(3)
// 2
// 1
// 0
上面代码中,n --> 0实际上会看成n-- > 0,所以输出二、一、0。
5.区块
JavaScript 使用大括号,将多个相关的语句组合在一块儿,称为“区块”(block)。
对于var命令来讲,JavaScript 的区块不构成单独的做用域(scope)。在外部仍有效
{
var a = 1;
}
a // 1
6.条件语句
6.1if 结构
var x = 1;
var y = 2;
if (x = y) {
console.log(x);
}
// "2"
上面代码的原意是,当x等于y的时候,才执行相关语句。可是,不当心将严格相等运算符写成赋值表达式,结果变成了将y赋值给变量x,再判断变量x的值(等于2)的布尔值(结果为true)。
if (x = 2) { // 不报错
if (2 = x) { // 报错
6.2if...else 结构
else代码块老是与离本身最近的那个if语句配对。
var m = 1;
var n = 2;
if (m !== 1)
if (n === 2) console.log('hello');
else console.log('world');
上面代码不会有任何输出,else代码块不会获得执行,由于它跟着的是最近的那个if语句,至关于下面这样。
6.3switch 结构
须要注意的是,每一个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等于其余值
switch语句部分和case语句部分,均可以使用表达式。
switch语句后面的表达式,与case语句后面的表示式比较运行结果时,采用的是严格相等运算符(===),而不是相等运算符(==),这意味着比较时不会发生类型转换。
switch (1 + 3) {
case 2 + 2:
f(); break;
default:
neverHappens();
}
var x = 1;
switch (x) {
case true:
console.log('x 发生类型转换'); break;
default:
console.log('x 没有发生类型转换');
}
// x 没有发生类型转换
6.4三元运算符 ?:
var even = (n % 2 === 0) ? true : false;
上面代码中,若是n能够被2整除,则even等于true,不然等于false。它等同于下面的形式。
var even;
if (n % 2 === 0) {
even = true;
} else {
even = false;
}
7.循环语句
7.1while 循环
7.2for 循环
for语句后面的括号里面,有三个表达式。
初始化表达式(initialize)开始时候只执行一次
条件表达式(test):每轮循环开始时,都要执行这个条件表达式,只有值为真,才继续进行循环。
递增表达式(increment):每轮循环的最后一个操做,一般用来递增循环变量
for ( ; ; ){
console.log('Hello World');
}
上面代码省略了for语句表达式的三个部分,结果就致使了一个无限循环。
7.3do...while 循环
不论是否符合都回先执行一次
7.4break 语句和 continue 语句
for循环也可使用break语句跳出当前循环。
for (var i = 0; i < 5; i++) {
console.log(i);
if (i === 3)
break;
}
// 0
// 1
// 2
// 3
var i = 0;
while (i < 100){
i++;
if (i % 2 === 0) continue;
console.log('i 当前为:' + i);
}
上面代码只有在i为奇数时,才会输出i的值。若是i为偶数,则直接进入下一轮循环。
若是存在多重循环,不带参数的break语句和continue语句都只针对最内层循环
7.5标签(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
foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);
// 1
// 2
上面代码执行到break foo,就会跳出区块。
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
上面代码中,continue命令后面有一个标签名,知足条件时,会跳过当前循环,直接进入下一轮外层循环。若是continue语句后面不使用标签,则只能进入下一轮的内层循环。
参考连接