JavaScript 中有四种逻辑运行符, &&(与)、 ||(或)、 !(非)、 ?? (空值合并)。它们被主要用于布尔值的运算。

&&(与)

当左右操作数都为 true 时返回 true ,否则返回 false

result = a && b
$$edit$$
$$jsdemo$$
alert(true && true) // true
alert(true && false) // false
alert(false && true) // false
alert(false && false) // false

||(或)

当左右操作数任意一个为 true 时返回 true ,都为 false 时才返回 false

result = a || b
$$edit$$
$$jsdemo$$
alert(true || true) // true
alert(false || true) // true
alert(true || false) // true
alert(false || false) // false

!(非)

返回一个相反的布尔值。

result = !value
$$edit$$
$$jsdemo$$
alert(!true) // false
alert(!false) // true

$$tip

逻辑运算符优先级: ! > && > ||

例: a && b || c && d 等同于 (a && b) || (c && d)

$$


练习

  1. 下面表达式的运算结果是什么?
true && !true
false || true && true || false
false || true && !true

$$answer

$$jsdemo$$
$$edit$$
alert(true && !true) // false
alert(false || true && true || false) // true
alert(false || true && !true) // false

$$

  1. 收集以下信息并帮助判断是否符合养老金申请标准。
  • 姓名
  • 年龄大于等于 65 岁
  • 社保缴纳大于等于 10 年

$$demo <button onclick="collect()">申请养老金</button> <script> function collect() { let name = prompt("请输入你的姓名") let age = Number(prompt("请输入你的年龄")) let socialSecurityMonths = Number(prompt("请输入社保时长(年)"))

    if (age >= 65 && socialSecurityMonths >= 10) {
        alert(`${name}符合养老金发放标准`)
    } else {
        alert("不符合养老金发放标准")
    }
}

</script> $$

$$answer

$$jsdemo$$
$$edit$$
let name = prompt("请输入你的姓名")
let age = Number(prompt("请输入你的年龄"))
let socialSecurityMonths = Number(prompt("请输入社保时长(年)"))

if (age >= 65 && socialSecurityMonths >= 10) {
    alert(`${name}符合养老金发放标准`)
} else {
    alert("不符合养老金发放标准")
}

$$

  1. 用户上班时间为周一至周五,每日早上 9 - 12 点,下午 14 - 17 点。询问用户周几和几点,判断是否处于工作时间。需要判断用户输入的时间区间是否准确,比如输入周 9 就要提醒不规范。

$$demo

<button onclick="judge()">作息判断</button> <script> function judge() { let day = Number(prompt("今天周几?(周日输入 7)")) let hour = Number(prompt("现在几点?(24小时制)"))

    if (day < 1 || day > 7) {
        alert("日期不符合规范")
    } else if (hour < 0 || hour >= 24) {
        alert("时间不符合规范")
    } else {
        if (
            day <= 5 &&
            ((9 <= hour && hour < 12) || (14 <= hour && hour < 17))
        ) {
            alert("现在是工作时间")
        } else {
            alert("现在是休息时间")
        }
    }
}

</script>

$$

$$answer

$$jsdemo$$
$$edit$$
let day = Number(prompt("今天周几?(周日输入 7)"))
let hour = Number(prompt("现在几点?(24小时制)"))

if (day < 1 || day > 7) {
    alert("日期不符合规范")
} else if (hour < 0 || hour >= 24) {
    alert("时间不符合规范")
} else {
    if (
        day <= 5 &&
        ((9 <= hour && hour < 12) || (14 <= hour && hour < 17))
    ) {
        alert("现在是工作时间")
    } else {
        alert("现在是休息时间")
    }
}

$$