JavaScript 学习笔记2

1,逻辑与的短路运算123&&456 数字除了0都为真,遇真继续执行,遇假则短路返回当前假值,所以输出456; 如果是0&&456,则输出0

2,逻辑或的短路运算,遇真则返回最初的真值,全假则返回最后的假值

        console.log(123 && 456 && 567 && 789); //789
        console.log(123 || false); //123
        console.log(null || undefined || 0 || NaN || "你好"); //你好
        console.log(0 || undefined || NaN); //NaN


        console.log(1 - 2 && 5 * 3); //15
        console.log(123 * 0 && 98 + 89); //0
        console.log(123 * 0 || 98 + 89); //187

下面的结果受到逻辑或短路运算的影响,还要注意自增运算的特殊情况:

        var num = 1;
        console.log(123 || num++); //?
        console.log(num++); //?
        console.log(num); //?

下面终于想到了一个逐步按键递增的方案:后面学习也许可以继续优化

<input type="button" value="每次按我增加1" id="btn">
<br>
<span id="num"></span>

        var age = 2;

        document.getElementById("btn").onclick = function() {
            var val = document.getElementById("num").innerHTML;
            console.log(val);
            val = val * 1;
            if (Boolean(val) == 0) {
                document.getElementById("num").innerHTML = autoNumber(age);
            } else {
                document.getElementById("num").innerHTML = autoNumber(val);
            }

            function autoNumber(num) {
                num++;
                return num;
            }

        }

3,赋值运算符=,+=,-=,*=,/=,%=

4,取余运算小练习


        var year = prompt("请输入年份");
        if (year % 4 == 0 && year % 100 !== 0 || year % 400 == 0) {
            alert(year + "年是闰年");
        } else {
            alert(year + "年是平年");
        }

5,三元表达式:5>9?’学好了’:’没学好’ 输出没学好。表达式是有返回值的。Pink老师的案例,有人问如果输入06会咋么样?会输出006,所以我们需要对输入的数字取整即可。同时要明白prompt输入的字符串数字,在参与运算时是当做数值看待的

        var time = prompt("输入数字");
        time = parseInt(time); //取整
        time = time < 10 ? '0' + time : time;
        alert(time);

6,for循环是循环语句的王者(其他还有while 和do while),其结构如下:

        for (初始化变量, 条件表达式, 操作表达式) {
            //执行语句:循环体
        }
        //例子:判断执行顺序
        for (var i = 1; i <= 100; i++) {
            console.log("你好吗?");
        } //初始值>条件表达式>循环体>操作表达式>条件表达式>循环体>操作表达式>……

7,断点调试,观察for循环的运行过程

        //代码学习
        var even = odd = 0;
        for (i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                even += i;
            } else {
                odd += i;
            }
        }
        alert("所有偶数的和是" + even);
        alert("所有奇数的和是" + odd);
        //算班级成绩:
            var score = 0;
        var num = prompt("输入人数");
        for (var i = 1; i <= num; i++) {
            score = score + parseInt(prompt("请输入第" + i + "位学员的成绩")); //也可以用乘除法
        }
        console.log("班级总成绩为" + score);
        console.log("班级平均成绩为" + score / num);

8,循环语句while 以及do while

        var num = 3;
        初始化变量
        while (num < 5) { //条件表达式
            //循环体
            num++; //操作表达式
        }
        alert();

        var num = 3; //初始化变量
        do {
            //循环体
            num++; //操作表达式
        } while (num < 5); //条件表达式
        alert();


        // while比for更灵活一些,可以用在更复杂的条件下;
        // 在数字重复计算更推荐for;
        // while可能从未被执行,而do while则至少被执行一次。  

9,continue 和break: continue 跳出当前次的循环执行下一循环;break是退出当前及之后的所有循环;当我使用while语句和do while语句练习下面的案例时出现了一个不报错的问题:

        var sum = 0,
            i = 1;
        while (i <= 100) {
            if (i % 7 == 0) {
                continue;
            }
            sum += i;
            i++; //如果i++放在这里,这个程序是不能正常运行的,因为i++并没有被执行,i的值没有变化,这里其实一直在continue
        }
        console.log(sum); //无法输出,一直运行

正确的代码应该如下面这样,才能得到正确的结果:

        var sum = 0,
            i = 0;
        while (i < 100) {
            i++;//避免被continue跳过
            if (i % 7 == 0) {
                continue;
            }
            sum += i;
        }
        console.log(sum); //4315

        var sum = 0,
            i = 0;
        do {
            i++;//避免被continue跳过
            if (i % 7 == 0) {
                continue;
            }
            sum += i;
        } while (i < 100);
        console.log(sum); //4315

为什么for循环不会报错呢?for循环中的操作表达式(i++)不是循环体的一部分,但是do while 和while确是。