if语句
- 语法格式:if (condition) statements else statements
- 注意:括号中的判断条件可以是任何表达式,求值结果不一定是布尔值,ECMAScript会自动调用Boolean()和你熟将它转成布尔值
do-while语句
后测试循环语句,循环体中的代码执行后才会对退出条件进行求值,所以循环体内的代码至少执行一次
-
例子
let i=0; do{ i+=2; } while(i<10);
while语句
- 先测试循环语句,先检测退出条件,然后再执行循环体的代码,所以循环体内的代码可能不会被执行
for语句
先测试语句
-
例子
let count = 0; for(let i=0;i< count; i++){ // 小括号里分别是初始化;条件表达式;循环后表达式 console.log(i); }
-
初始化,条件表达式,循环后表达式都可以省略,所以可以写一个无穷循环
for (; ; ){ statements; }
-
如果只写了条件表达式,省略另外两个,那么for循环就变成了while循环
let count = 10; for(;i< count;){ console.log(i); i++; }
for-in语句
一种严格的迭代语句,用于枚举对象中的非符号键属性
语法格式:for(property in expression) statement
-
例子
for (const i in window){ document.write(i); }
- 打印出BOM对象window的所有属性
- 所有可枚举的属性都会返回出来,但是顺序不一样
如果要迭代的变量是null或undefined,就不执行循环体
for-of语句
一种严格的迭代语句,用于遍历可迭代对象的元素
语法格式:for(property of expression) statement
-
例子
for (const i of [2,4,6,8]){ document.write(i); }
for-of循环会按照可迭代对象的next()方法产生值的顺序迭代元素,如果尝试迭代的变量不支持迭代,那么就报错
标签语句
给指定的语句加上标签,可以通过break或continue引用,主要用在嵌套循环中
语法格式:label: statement
-
例子
start:for(let i=0;i<10;i++){ console.log(i); }
break和continue
break语句用于立即退出循环
continue语句用于立即退出当次循环
-
break语句和标签语句一起使用
let n = 0; outer:for (let i = 0; i < 10; i++) { for (let j = 0; j < 10; j++) { if (i === 5 && j === 5) { break outer; } n++; } } console.log(n); // 最后输出结果是55
with语句
用于将代码作用域设置为特定的对象
语法格式:with(expressin) statement;
-
当需要对一个对象反复操作的时候,可以用with语句
let a = location.search.substring(1); let b = location.hostname; let c = location.href; // 上面代码中,每一行都用到了location,那么可以改成下面的代码 with(location){ let a = search.substring(1); let b = hostname; let c = href; }
严格模式下不允许使用with语句
switch语句
-
switch语句借鉴了其他语言的switch语句,但是ECMAScript给它赋予了独有的特性
- switch语句可以用于所有数据类型
- 条件的值不需要是常量,可以是变量或表达式
-
例子
switch ("hello world") { case "hello" + " world": console.log("打个招呼"); break; // break用来跳出switch循环,不写break那么每个条件都会去判断 case "goodbye": console.log("再见"); break default: console.log("这是默认消息"); }