chapter1.3、JS的分支语法

JS语法

语句块

JS使用大括号构成语句块。
ES6 之前语句块是没有作用域的,从ES6开始支持 块作用域 ,let只能在块作用域内可见,函数作用域还是在函数内对内可见,外部无法直接访问

function hello() {
    let a = 1;
    var b = 2;
    c = 3
    }

//console.log(a) // 不可见
//console.log(b) // 不可见
//console.log(c) // 不可见吗?

块作用域

if (1) {
    let d = 4;
    var e = 5;
    f = 6
    if (true) {
        console.log(d)
        console.log(e)
        console.log(f)
        console.log('-------------')
        g = 10
        var h = 11
    }
}
let d = 44
// console.log(d) // 块作用域使用let,不可见;但是块外的d可见
console.log(e) // 块作用域使用var,可见
console.log(f) // 块作用域隐式声明,可见
console.log(g) // 可见
console.log(h) // 可见

大括号中的一行可以不加括号,多行必须加,为了代码安全性,最好全都加上

流程控制

条件分支

a = 100
if (a<100) {
    console.log("less than 100")
}else if (a>100) {
    console.log("more than 100")
}else if (a === 100) {
    console.log("That's OK")
}else {
    console.log("No")

注意等效false的值

false,undefined,null,0,NaN,空字符串,其他的都视为true

注意,空数组,空对象是等效true的

switch...case分支语句

switch (expression) {
  case label_1:
    statements_1
    [break;]
  case label_2:
    statements_2
    [break;]
  ...
  default:
    statements_def
    [break;]
}

switch有向后穿透的能力,可以在case中恰当使用break语句,否则会继续向下执行

x = parseInt(Math.random() * 10)
switch (x) {
    case 0:
        console.log("zero");
        break;
    case 1:
        console.log("one");
    case 2:
        console.log("two");
    case 3:
        console.log("three");
        break;
    case 5:
    case 4:
        console.log("four")
    default:
        console.log("other")
}

switch...case结构都可以转换为if...else...结构,多分支结构

for 循环

for 循环可以在一行实现。
 ( ; ; )第一部分是要迭代变量,进入时执行一次,第二个是退出条件,每次都要判断,第三个执行条件是在执行完代码块才执行的。

先判断退出条件,执行代码块,再走第三部分

// C风格循环
for (i=0;i<10;i++){
    console.log(i)
}

也可以这样使用,但是循环次数一样才能

for (var x=0,y=5;x<6;x++,y--) {
    console.log(x+y)
}

也可以使用跳过的方法

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

死循环

for (;;) // 死循环
    console.log(".......")

 

while循环 和 do...while循环

arr = [1,2,3,4]
var i=0,j=arr.length-1
while (i<arr.length){
    console.log(arr[i]);
    i++;
}

do...while循环,先进入循环,然后判断,为真就继续循环

var i= 0
do{
    console.log(arr[i]);
    i++;
}
while (i<arr.length);

for...in循环

对象操作语句for...in用来遍历对象的属性

for in 循环返回的是索引或者key,需要间接访问到值。
数组反正返回的是索引,C风格for循环操作可能方便点。根据个人喜好选择。
对象用for in合适

for...of 循环

注意:for ... of 不能迭代对象。
原因是,of后面必须是一个迭代器(TypeError: obj[Symbol.iterator] is not a function)
可类比python中的for in,例如for x in [ ]

只能迭代数组

break 、 continue

break 结束当前循环
continue 中断当前循环,直接进入下一次循环

for迭代的差别

function sum(arr){
    for (let x in arr){ // 遍历index或对象属性
        console.log(x, typeof(x),arr[x]);
    }
    for (let x of arr){ // 遍历元素
        console.log(x, typeof(x));
    }
    for (let x=0;x<arr.length;x++){ // 自己定义索引数值遍历
        console.log(x, typeof(x),arr[x]);
    }
}
sum([3,6,9]);

 

posted on 2018-11-16 17:59  Riper  阅读(150)  评论(0编辑  收藏  举报

导航