1、JavaScript语句

174 阅读3分钟

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)