六、JavaScript语句
(一)、if语句
语法: if (condition) statement1 else statement2 或连续多个if语句
if (condition1) statement1 else if (condition2) statement2 else statement3
条件(condition)任何表达式,并且求值结果不一定是布尔值。ECMAScript 会自
动调用 Boolean()函数将这个表达式的值转换为布尔值。如果条件求值为 true,则执行语句
statement1;如果条件求值为 false,则执行语句 statement2。
if (i > 25)
console.log("Greater than 25."); // 只有一行代码的语句
else {
console.log("Less than or equal to 25."); // 一个语句块
}
if (i > 25) {
console.log("Greater than 25.");
} else if (i < 0) {
console.log("Less than 0.");
} else {
console.log("Between 0 and 25, inclusive.");
}
(二)、do-while语句
do-while 语句是一种后测试循环语句,即循环体中的代码执行后才会对退出条件进行求值。(循环体内的代码至少执行一次。)
语法:
do {
statement
} while (expression);
let i = 0;
do {
i += 2;
} while (i < 10);
(三)、while语句
while 语句是一种先测试循环语句,即先检测退出条件,再执行循环体内的代码。(while 循
环体内的代码有可能不会执行)
语法:
while(expression) statement
let i = 0;
while (i < 10) {
i += 2;
}
(四)、for语句
for 语句也是先测试语句,只不过增加了进入循环之前的初始化代码,以及循环执行后要执行的表达式。
语法: for (initialization; expression; post-loop-expression) statement
注意:初始化、条件表达式和循环后表达式都不是必需的。
let count = 10;
for (let i = 0; i < count; i++) {
console.log(i);
}
//无限循环(死循环)
for (;;) { // 无穷循环
doSomething();
}
(五)、for-in语句
for-in 语句是一种严格的迭代语句,用于枚举对象中的非符号键属性。
语法: for (property in expression) statement
注意: ECMAScript 中对象的属性是无序的,因此 for-in 语句不能保证返回对象属性的顺序。如果 for-in 循环要迭代的变量是 null 或 undefined,则不执行循环体。
for (const propName in window) {
document.write(propName);
}
(六)、for-of语句
for-of 语句是一种严格的迭代语句,用于遍历可迭代对象的元素。
语法: for (property of expression) statement
注意: 与 for 循环一样,这里控制语句中的 const 也不是必需的。for-of 循环会按照可迭代对象的 next()方法产生值的顺序迭代元素。ES2018 对 for-of 语句进行了扩展,增加了 for-await-of 循环,以支持生成期约(promise)的异步可迭代对象。
for (const el of [2,4,6,8]) {
document.write(el);
}
(七)、标签语句
标签语句用于给语句加标签。
语法: label: statement
start: for (let i = 0; i < count; i++) {
console.log(i);
}
//start 是一个标签,可以在后面通过 break 或 continue 语句引用。
//标签语句的典型应用场景是嵌套循环。
(八)、break 和 continue 语句
break 和 continue 语句为执行循环代码提供了更严格的控制手段。break 语句用于立即退
出循环,强制执行循环后的下一条语句句。而 continue 语句也用于立即退出循环,但会再次从循环顶部开始执行。
//break
let num = 0;
for (let i = 1; i < 10; i++) {
if (i % 5 == 0) {
break;
}
num++;
}
console.log(num); // 4 循环执行了 4 次,
//continue
let num1 = 0;
for (let i = 1; i < 10; i++) {
if (i % 5 == 0) {
continue;
}
num1 ++;
}
console.log(num1 ); // 8 循环被完整执行了 8 次。
//嵌套循环break
let num2= 0;
outermost:
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num2++;
}
}
console.log(num2); // 55
//嵌套循环 continue
let num = 0;
outermost:
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
num++;
}
}
console.log(num); // 95
(九)、with语句
with 语句的用途是将代码作用域设置为特定的对象。
语法: with (expression) statement;
主要场景是针对一个对象反复操作,将代码作用域设置为该对象能提供便利。
注意: with 语句影响性能且难于调试其中的代码,不推荐在产品代码中使用 with语句。
let qs = location.search.substring(1);
let hostName = location.hostname;
let url = location.href;
//上面代码中的每一行都用到了 location 对象。如果使用 with 语句,就可以少写一些代码:
with(location) {
let qs = search.substring(1);
let hostName = hostname;
let url = href;
}
(十)、swich语句
switch 语句是与 if 语句紧密相关的一种流控制语句。
语法:
switch (expression) {
case value1:
statement
break;
case value2:
statement
break;
case value3:
statement
break;
case value4:
statement
break;
default:
statement
}
每个 case(条件/分支)相当于:“如果表达式等于后面的值,则执行下面的语句。”break关键字会导致代码执行跳出 switch 语句。如果没有 break,则代码会继续匹配下一个条件default关键字用于在任何条件都没有满足时指定默认执行的语句(相当于 else 语句)。
注意:switch 语句在比较每个条件的值时会使用全等操作符,因此不会强制转换数据类型
switch (i) {
case 25:
console.log("25");
break;
case 35:
console.log("35");
break;
case 45:
console.log("45");
break;
default:
console.log("Other");
}
//效果同上
if (i == 25) {
console.log("25");
} else if (i == 35) {
console.log("35");
} else if (i == 45) {
console.log("45");
} else {
console.log("Other");
}
七、函数
ECMAScript 中的函数使用 function 关键字声明,后跟一组参数,然后是函数体。
语法:
function functionName(arg0, arg1,…,argN) {
statements
}
通过函数名来调用函数,函数的参数放在括号里(如果有多个参数,则用逗号隔开)
function sayHi(name, message) {
console.log("Hello " + name + ", " + message);
}
sayHi("Nicholas", "how are you today?");
ECMAScript 中的函数不需要指定是否返回值。任何函数在任何时间都可以使用 return 语句来返回函数的值,用法是后跟要返回的值。不指定返回值的函数实际上会返回特殊值 undefined。
function sum(num1, num2) {
return num1 + num2;
}
const result = sum(5, 10);
只要碰到 return 语句,函数就会立即停止执行并退出。return 语句后面的代码不会被执行。
function sum(num1, num2) {
return num1 + num2;
console.log("Hello world"); // 不会执行
}
一个函数里也可以有多个 return 语句。
function diff(num1, num2) {
if (num1 < num2) {
return num2 - num1;
} else {
return num1 - num2;
}
}
严格模式对函数也有一些限制:
- 函数不能以 eval 或 arguments 作为名称;
- 函数的参数不能叫 eval 或 arguments;
- 两个命名参数不能拥有同一个名称。
如果违反上述规则,则会导致语法错误,代码也不会执行。