5.语句

if 语句

if(i > 25)
    console.log('i > 25') // 单行代码
else{
    console.log('i < 25') // 代码块
}

推荐写法

if(i > 25){
    console.log('i > 25')
}
else if(i < 0){
    console.log('i < 0')
}else{
    console.log('0 <= i <= 25')
}

do-while 语句

后测试循环语句。循环体内执行完代码之后,才会测试出口条件。(循环体内的语句至少执行一次

do{
    statement
} while (expression)
// 输出1
do{
    console.log(1)
}while(false)
var i = 0
do{
    i += 2
}while(i < 10)
console.log(i) // 10

While 语句

前测试循环语句。先测试出口条件,在执行循环体内代码

while(expression){
    statement
}
// 没有输出
while(false){
    console.log(1)
}
var i = 0
while(i < 10){
    i += 2
}
console.log(i) // 10˝

for 语句

前测试循环语句。执行循环钱初始化变量和定义循环后要执行代码的能力

// 输出0,1,2,3,4,5,6,7,8,9
for(var i = 0;i < 10;i++){
    console.log(i)
}

由于不存在块级作用域,所以循环体内定义的变量外部也可以访问

for(var i = 0;i < 10;i++){}
console.log(i) // 10

一个经典的问题

// 函数体内全部引用变量i,i最后变为10,所以所有输出都为10
var a = []
for(var i = 0;i < 10;i++){
    a[i] = function(){
        console.log(i)
    }
}
a[0]() // 10
a[9]() // 10
// let为块级作用域,函数每次引用的i都是重新声明的,所以符合预期
var a = []
for(let i = 0;i < 10;i++){
    a[i] = function(){
        console.log(i)
    }
}
a[0]() // 0
a[9]() // 9

for-in 语句

精准迭代语句。用来枚举对象的属性.
for…in 语句以任意顺序遍历一个对象的可枚举属性

for(var propName in window){
    console.log(propName)
}
// postMessage
// blur
// focus
// close
// parent
// opener
// ... so many

遍历对象的可枚举属性

var myObj = {}
Object.defineProperties(myObj, {
  name: {
    value: 'liuchang',
    writable: true,
    enumerable: true // 可枚举
  },
  age: {
    value: 26,
    writable: false,
    enumerable: false // 不可枚举
  }
})
// myObj {name: "liuchang", age: 26}
for(var name in myObj){ console.log(name) } // name

break 和 continue 语句

break 立即退出循环

for(var i = 0; i < 10; i++){
    if(i == 5){
        break
    }
    console.log(i)
}
// 0 1 2 3 4

continue 不执行当次循环后面的语句,但会从循环的顶部继续执行

for(var i = 0; i < 10; i++){
    if(i == 5){
        continue
    }
    console.log(i)
}
// 0 1 2 3 4 6 7 8 9

Switch

  • Switch 在匹配时使用的是全等操作
  • 如果没有 break 退出当前循环,则按顺序执行
var i = 25;
switch (i) {
  case 25:
    console.log(25);
    break;
  case 35:
    console.log(35);
    break;
  default:
    console.log(0);
}
// 25

没有 break 按顺序执行,合并 25 和 35 两种情形

var i = 25;
switch (i) {
  case 25:
    console.log(25);
  case 35:
    console.log(35);
    break;
  default:
    console.log(0);
}
// 25 35

// 等同于
if(i == 25 || i == 35){
    // ...
}else{
    // ...
}

没有 break 按顺序执行

var i = 25;
switch (i) {
  case 10:
    console.log(10);
  case 25:
    console.log(25);
  case 35:
    console.log(35);
    break;
  default:
    console.log(0);
}
// 25 35

Switch 在匹配时使用的是全等操作(”5″ 不等于 5)

switch("5"){
    case 5:
        console.log('true')
        break
    default:
        console.log('false')
}
// false
    原文作者:ChangLau
    原文地址: https://www.jianshu.com/p/40dcf2622ec8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞