zoukankan      html  css  js  c++  java
  • 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]);
  • 相关阅读:
    ubuntu samba 服务器设置
    Unable to find the ncurses libraries
    ubuntu 11.04 tftp 设置
    Ubuntu 11.04 NFS 配置
    Ubuntu server 网络设置
    ubuntu 11.04 tslib1.4 编译
    HGE DirectX9.0C版本修改已经完成,发图祝贺一下。
    HGE继续修改绘图底层
    D3D中的AGP内存、系统内存、显存的理解
    For循环和递归的一些区别。
  • 原文地址:https://www.cnblogs.com/rprp789/p/9970728.html
Copyright © 2011-2022 走看看