JavaScript语句
if语句
if语句是使用最频繁的语句之一。
if (condition) statement1 else statement2
这里的条件(condition)可以是任意表达式,并且求值结果不一定是布尔值。ECMAScript 会自动调用 Boolean() 函数将这个表达式的值转为布尔值。如果条件求值为 true ,则执行语句 setatement1;如果条件求值为 false ,则执行语句 statement2。这里的语句(statement)可能是一行代码,也可能是一个代码块(即包含在一对花括号中的多行代码)。
if (i > 25)
console.log("大于25");
else {
console.log("小于或等于25");
}
这里最好的使用方法是使用代码块。哪怕只有一行diamante要执行也是如此。这是因为语句块可以避免对什么条件下执行什么产生困惑。
可以向这样连续使用多个if语句。
if (i > 25) {
console.log("大于25");
}else if (i < 0) {
console.log("小于0");
}else {
console.log("介于0和25之间(含0和25)");
}
do-while 语句
do-while 语句是一种后测试语句,即循环中的代码执行后才能对退出条件进行求值。换句话说,循环体内的代码至少执行一次。
do-while 语法:
do {
statement
} while (expression);
例子:
let i = 0;
do {
i += 2;
} whild (i < 10);
这个例子中,只要 i 小于 10,循环体就会重复执行。i 从 0 开始,每次循环递增 2。
注意:后测试循环经常用于这种情形:循环体内代码在退出前至少要执行一次。
while 语句
while 语句是一种先测试循环语句,即先检测退出条件,再执行循环体内的代码。因此 while 循环体内的代码有可能不会执行。
while 循环的语法:
let i = 0;
while (i < 10) {
i += 2;
}
// 在这个例子中,变量 i 从 0 开始,每次循环递增 2 。只要 i 小于 10,循环就会继续。
for 语句
for 语句也是一种先测试循环语句,只不过增加了进入循环之前的初始化代码,以及循环执行后要执行的表达式。
for 循环的语法:
for (initialization; expression; post-loopexpression) statement
例子:
let count = 10;
for (let i = 0; i < count; i++) {
console.log(i);
}
// 以上代码自爱循环开始前定义了变量 i 的初始值为 0 。然后求值条件表达式,如果求值结果为 true (i < count), 则循执行循环体。因此循环体也可能不会被执行。如果循环体被执行了,则循环后表达式也会执行,以便递增变量 i。
for 循环 跟 下面的 while 循环是一样的。
let count = 10;
let i = 0;
while (i < count) {
console.log(i);
i++;
}
无法通过 while 循环实现的逻辑,同样也无法使用 for 循环实现。因此 for 循环只是将循环相关的代码封装到了一起而已。
for-in 语句
for-in 语句是一种严格的迭代语句。
作用:用于枚举对象中的非符号键属性。
for-in 语法:
for (property in expression) statement
例子:
for (const propName in window) {
document.write(propName);
}
// 这个例子使用 for-in 循环显示了 BOM 对象 window 的所有属性。每次执行循环,都会给变量 propName 赋予一个 window 对象的属性作为值,直到 window 的所有属性都被枚举一遍。
let website = { 'baiud': 'www.baidu.com', 'JD': 'www.JD.com' }
for (const domain in website) {
console.log(website[domain]);
}
for-of 语句
for-of 语句是一种严格的迭代语句。
作用:用于遍历可迭代对象的元素。
for-of 语法:
for (property of expression) statement
示例:
for (const el of [2, 4, 6, 8]) {
document.write(el);
}
// 使用 for-of 语句显示了一个包括4个元素的数组中的所有元素。循环体会一直持续到所有元素都迭代完。
for-of 循环会按照可迭代对象的 next() 方法产生值的顺序迭代元素。
如果尝试迭代的变量不支持迭代,则 for-of 语句会抛出错误。
标签语句
标签语句用于给语句加标签。
语法如下:
label: statement
例子:
start: for (let i = 0; i < count; i++) {
console.log(i);
}
// start 是一个标签,可以再后面通过 break 或 continue 语句引用。标签语句的典型应用场景就是嵌套循环。
PS:这里小看不懂没关系,看下面的 break 和 continue 语句中的例子你就明白了。
break 和 continue 语句
break 和 continue 语句为执行循环代码提供了更严格的控制手段。
berek语句:用于立即退出循环,强制执行循环后的下一条语句。
continue:也是用于立即退出循环,但是会再次从循环顶部开始执行。
例子:
let num = 0;
for (let i = 1; i < 10; i++) {
if (i % 5 == 0) {
break;
}
num ++;
}
console.log(num); // 4
// for 循环会将变量 i 由 1 递增到 10。而循环体内,有一个 if 语句用于检查 i 是否能被 5 整除。如果是,则执行 break语句,退出循环。当 i 等于 5 时,break 语句会导致循环退出。该次循环不会执行递增 num 代码。
let num = 0;
for (let i = 1; i < 10; i++) {
if (i % 5 == 0) {
continue;
}
num ++;
}
console.log(num); // 8
// console.log 显示 8,即循环被完整执行 8 次。当 i = 5 的时,循环会在递增 num 之前退出,但会执行下次迭代,此时 i = 6。然后循环一直执行到自然结束,即 i = 9。最终 num 的值是 8 而不是 9 ,是因为 continue 语句导致它少递增了一次。
break 和 continue 都可以与标签语句一起使用,返回代码中特定的位置。
let num = 0;
outermost:
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
console.log(num); // 55
// outermost 标签标识的是第一个 for 语句。每个循环执行10次,意味着 num++ 语句会被执行 100 次。break 带来了一个变数,即要退出到标签。添加标签不仅让 break 退出(使用变量 j 的)内部循环,也会退出(使用变量 i 的)内部循环。当执行到i 和 j 等于 5 时,循环停止执行。此时 num 的值是 55。
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
// continue 语句会强制循环继续执行,但不是继续执行内部循环,而是继续执行外部循环。当 i 和 j 等于5 时,会执行 continue 跳到外部循环体继续执行,从而导致内部循环少执行5次。
with 语句
with 语句的用途是将代码作用域设置为特定的对象。
with 语句的语法:
with (expression) statement;
使用 with 语句的主要场景是:针对一个对象反复操作,这时候将代码作用域设置为该对象能提供便利。
例子:
let gs = location.search.substring(1); // substring 是截取, 截取 location.search 返回的字符串
let hostName = location.hostname();
let url = location.href;
// 上面代码中每一行都用到了 location 对象。使用 with 语句是下面代码
with(location) {
let gs = search.substring(1);
let hostNmae = hostname();
let url = href;
}
// with语句用于连接 location 对象,这意味着在这个语句内部,每个变量首先会被认为是一个局部变量。如果没有找到该局部变量,则会搜索 location 对象,看它是否有一个同名的属性。如果有则该变量会被求值为location对象的属性。
注意:严格模式不允许使用 with 语句。否则会抛出错误。
switch 语句
switch 语句是与 if 语句紧密相关的一种流控制语句。
语法:
switch (expression) {
case value1:
statement;
break;
case value2:
statement;
break;
case value3:
statement;
break;
default:
statement;
}
这里每个 case(条件分支)相当于:“如果表达式等于后面的值,则执行下面的语句”。break 关键字会导致代码执行跳出 switch 语句。如果没有 break,则代码会继续匹配下一个条件,default 关键字用于在任何条件都没满足的时候指定默认执行的语句(相当于 else 语句)。
例子:
switch (i) {
case 25:
console.log("25");
break;
case 35:
console.log("35");
break;
case 45L
consoel.log("45");
breal;
default:
consoel.log("其他");
}
最好给每个执行语句后面加上 break 语句。如果确实需要连续匹配几个条件,那么推荐写个注释表明是故意忽略了 break。
switch (i) {
case 25:
console.log("25");
/*跳过*/;
case 35:
console.log("25 or 35");
break;
case 45L
consoel.log("25 or 45");
breal;
default:
consoel.log("25 or 其他");
}
Switch 语句可以用于所有的数据类型。
switch ("hello world") {
case "hello" + " world":
console.log("Greeting was found");
case "goodbye":
console.log("Closing was found");
default:
console.log("Unexpected message was found")
}
Switch 语句能够在条件判断中使用表达式,就可以在判断在加入更多逻辑。
let num = 25;
switch (true) {
case num < 0:
console.log("Less than 0");
break;
cale num >= 0 && num <= 10:
console.log("Between 0 and 10");
break;
default:
console.log("More than 10")
}
注意:switch 语句在比较每个条件的值时会使用全等操作符,因此不会强制转换数据类型(比如,字符串"10"不等于数字10)