JS基础--判断+ 循环

JS判断

if/else if/ else

三元运算符

简单的if else 书写,如果复杂的话,就不要写成三元运算符了。如果判断后没有执行语句,则需要写null 或 undefined来占位
例:将如下if else 判断转为三元运算符

let a = 10;
if (a > 0) {
    if (a < 10) {
        a++;
    } else {
        a--;
    }
} else {
    if (a > -10) {
        a += 2;
    }
}

由于最后一个if没有else 语句,所以需要加null 或者undefined进行赋值。转换后的结果为:

a > 0 ? (a < 10 ? a++ : a--) : (a > -10 ? a += 2 : null);

如果不加null或undefined,则报错:

Uncaught SyntaxError: Unexpected token ')'

在这里插入图片描述

switch case

  1. 每种case之后最好都加上brea。不加break,则不管后面条件是否成立,都要执行,直到遇到break为止
    每种条件都不成立,则写default;
  2. ** 当一个变量在不同几种值下,执行的语句是一样的时候,可以不加break;**
  3. 每种case里的等号是绝对相等(‘=’包括数值类型),和if else里面不同,if else里面是。 为了业务严谨,使用===

例: 幂的表示: Math.pow(x,次方数)

let a = 10;
switch (a) {
    case 1:
        a += 1;
        break;
    case 5:
        a += 5;
        break;
    default:
        a = Math.pow(a, 2);
}
console.log(a);
//输出100

例: 如果将case1里的break去除,则为:

let a = 1;
switch (a) {
    case 1:
        a += 1;
    case 5:
        a += 5;
        break;
    default:
        a = Math.pow(a, 2);
}
console.log(a);

输出7

case 1 执行,case 5 虽然不符合a=1, 但是由于case1 没有break,则也会被执行。

当然,break 不加也是有用处的。比方说,不同的取值,对应同一个执行语句时,就可以不加break;
例:

let a = 1;
switch (a) {
    case 1:
    case 5:
        a++;
        break;
    default:
        a = Math.pow(a, 2);
}
console.log(a);
// 2

a为1或5 时,做自增操作。因为case 1 里面没有内容,且没有break,所以继续执行5里面的内容,遇到break 跳出判断。

例: 年终奖计算
在这里插入图片描述

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>年终奖计算</title>
</head>

<body>
    工龄: <input type="text" value="1" id='year' />
    <br> 月薪: <input type="text" value="5000" id='salary' />
    <br>
    <button type="submit" id="sub">计算年终奖</button>
    <br> 您的年终奖为:<span id='bonus'></span>
</body>
<script>
    let year = document.getElementById('year');
    let salary = document.getElementById('salary');
    let sub = document.getElementById('sub');
    let bonus = document.getElementById('bonus');

    sub.onclick = function() {
        // 获取year 和 salary的值, 在点击onclick 需要重新获取值, 所以将这个值放在函数体内
        let y = Number(year.value);
        console.log(y);
        let s = Number(salary.value);
        console.log(typeof s);
        console.log(s);
        let result = null;
        if (isNaN(y) || isNaN(s)) {
            alert("请检查输入是否有误。");
            // 终止函数执行
            return;
        }
        if (y > 0 && y <= 1) {
            result = (s <= 8000 ? s : s * 1.2);
            console.log(result);
        } else if (y > 1 && y <= 2) {
            result = s < 10000 ? 1.5 * s : 1.7 * s;
            console.log(result);

        } else {
            result = s < 12000 ? 3 * s : 3.2 * s;
            console.log(result);

        }
        // 将值写入span的内容,调用innerHTML
        bonus.innerText = result;

    }
</script>

</html>

JS循环

for

for in

for in 循环是遍历对象中所有的属性名对应的属性值。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>for in 循环</title>
</head>

<body>
    <script>
        let stu = {
            name: 'Amy',
            ID: 10,
            1: 90,
            2: 98
        };
        // key是属性名对应的变量,对象中有多少组键值对,循环就执行几次(除非break结束)
        // 获取属性值:obj[属性值], 不能写成obj['key']或者obj.key ,这样就代表键名为'key' , 而实际没有这个key,所以结果为undefined。
        for (var key in stu) {
            console.log("属性名:" + key + ", 属性值:" + stu[key]);
        }
        console.log(stu.key); //undefined
        console.log(stu['key']); //undefined
    </script>
</body>

</html>

结果为:

属性名:1, 属性值:90
属性名:2, 属性值:98
属性名:name, 属性值:Amy
属性名:ID, 属性值:10
undefined
undefined

结果发现,属性名为数字的在最上面按照大小展示(属性名:1,2, name, ID )

属性名和变量的区别

例:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>变量名和属性名的区别</title>
</head>

<body>
    <script>
        var name = 10;
        var obj = {
            name: "Asia",
            10: "Happy"
        };
        // 1. 属性名只能是数字或者字符串,在对象中,属性值name虽然没有加“”, 但本质是“name”。
        // 2. 对象属性名的调用方式有两种, obj.name 和 obj['name']
        // 3. name 是变量名, 代表的是这个变量对应的值, obj[name] 和 obj['name'] 是两个不同的符号. 
        // obj[name] 表示obj[10]
        console.log(obj.name); // "Asia"
        console.log(obj['name']); //"Asia"
        console.log(obj[name]); //"Happy"
    </script>
</body>

</html>

总结:
1. 属性名只能是数字或者字符串,在对象中,属性值name虽然没有加“”, 但本质是“name”。
2. 对象属性名的调用方式有两种, obj.name 和 obj[‘name’]
3. name 是变量名, 代表的是这个变量对应的值, obj[name] 和 obj[‘name’] 是两个不同的符号.

for of (ES6 新增)

while 循环

do while 循环

continue 和 break 区别

continue 是跳出本次循环,继续执行下一次循环。break 是立即跳出循环,执行循环后面的语句。
示例:

for (var i = 0; i < 10; i++) {
    if (i >= 2) {
        i += 2;
        continue;
    }
    if (i >= 6) {
        i--;
        break;

    }
    i++;
    console.log(i);
}
console.log(i);

/*
i=0, i++, i=1, 输出, i又进行循环体的自增,i=2;
i=2,i>=2 满足,i=4,continue 表示i执行i++ 后,继续下一次循环,则i=5;
i=5, i>=2 满足,i=7,continue , i=8;
i=8, i>=2 满足,i=10, continue, i=11;
i=11, 不满足<10, 不执行循环体, 直接输出i=11
 */

可以通过Chrome进行调测: 使用watch 观察变量值。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AsiaFT.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值