马黑黑 发表于 2026-2-19 20:50

布尔值与逻辑判断

<style>
    .showBox { font-size: 18px; }
    .showBox p { margin: 10px 0; }
    .showBox code, .showBox pre { background: #eee; padding: 2px 6px; tab-size: 4; }
    .showBox pre { padding: 10px 20px; white-space: pre-wrap; word-wrap: break-word; }
    .showBox pre code { padding: 0; background: none; }
    .showBox blockquote { border-left: 3px solid #87cefa; padding: 2px 6px; }
</style>

<div class="showBox">
    <h2>1️⃣布尔值</h2>
    <p>
      布尔值(Boolen)是计算机科学中的一种
      <strong>数据类型</strong>
      ,通常用于表示真(True)或假(False)。
    </p>
    <p>布尔值的值非真即假,是对开关开或关两种状态的严格模拟,在编程实践中常用来做逻辑判断。例如,小军同学报名参军,计算机程序根据其年龄进行判断是否符合报名条件,布尔值这个时候就能用上。我们假设报名年龄规定如下:</p>
    <blockquote>
      <p>
            年龄大于等于18周岁且小于等于22周岁
            <br>
            ……(还有其他条件)
      </p>
    </blockquote>
    <p>计算机如何就上述规定做出判断呢?假设小军年报填的年龄是17.5岁,则年龄小于18岁,布尔值为假,不符合报名条件;如果填的是19岁整,则年龄大于17岁且不突破最大年龄,布尔值为真,符合报名条件;如果填写的年龄是23周岁,则突破了22岁的最大年龄规定,就普通公民而言不能报名。</p>
    <p>这里面涉及到了复合性的条件判断,所以需要用到逻辑判断的“与”、“或”、“非”。</p>
    <h2>2️⃣逻辑判断</h2>
    <p>基于真假两种状态做出的判断叫逻辑判断。好比电灯的开关,如果开关的状态为开则灯亮,反之则灯不亮。以JS为例,它这么操作:</p>
    <pre><code>if (switch === 'on') {
    lights = 'on';
} else {
    lights = 'off';
}</code></pre>
    <p>
      switch 是我们假定的开关名称,这叫自定义变量,lights一样是个变量,代表灯,开关的开、灯亮的状态用字符串值 'on' 表示,'off' 表示关。
      <code>if ... else ...</code>
      是判断流程语句,“如果……否则……”之意;if 后面是一个放在小括号
      <code>()</code>
      里的表达式,语句
      <code>switch === 'on'</code>
      是“开关开”的意思,三个等号
      <code>===</code>
      表示严格等于。表达式
      <code>switch === 'on'</code>
      如果成立(布尔值为true),
      <code>lights = 'on',即灯亮,语句放在一组花括号 {} 内,反之,</code>
      lights='off'`,灯灭,语句也要放在花括号内。
    </p>
    <p>开关的开和关影响灯的亮灭是简单的逻辑判断,条件单一,仅凭布尔值的真、假状态便可实现。现在我们回到小军参军的年龄判断问题:由于年龄有上下边界设定,在对年龄是否符合报名条件时需要使用复合式条件,试看:</p>
    <pre><code>if (age >= 18 && age <= 22) {
    console.log('pass'); // 通过
} else {
    console.log('no pass'); // 不通过
}</code></pre>
    <p>
      条件表达式
      <code>(age >= 18 && age <= 22)</code>
      例的
      <code>&&</code>
      是 and(与)的意思,它用来粘连两个子表示式,
      <code>age >= 18</code>
      和
      <code>age <= 22</code>
      ,表示这两个子表达式必须同时成立。这叫“
      <strong>逻辑与</strong>
      ”,&& 等于 and,原意“和”,这里称为“与”,即
      <strong>逻辑与</strong>
      。
    </p>
    <p>
      “
      <strong>逻辑或</strong>
      ”用
      <code>||</code>
      表示,or(或者)的意思。现在假设小军的年龄为23岁,他之所以报名因为他是在读大学生或者是研究生,参军年龄规定中有放宽政策:对在读大学生可以放宽到24岁、在读研究生可以放宽到26岁。这时,仅针对年龄大于22周岁而言,
      <strong>逻辑或</strong>
      用上:
    </p>
    <pre><code>// 外层条件:处理22~24岁年龄段,用逻辑与
if (age >= 22 && age <= 24) {
    // 里层条件:判断是大学生或研究生,用逻辑或
    if (collegeStudent || graduateStudent) {
      console.log('pass');
    } else {
      console.log('no pass');
    }
}</code></pre>
    <p>
      在 22~24 这个年龄段,如果身份为在读大学生或是在读或已毕业研究生都可以报名。里层条件语句针对身份做判断,两条用
      <code>||</code>
      黏连起来的子条件语句只要有一条成立,复合表达式整体布尔值就会为真(true),可以报名,两条子表达式都为假则整体表达式布尔值为假,不能报名。PS:两条子表达式都为真的情形会存在,若此,条件自然也成立。
    </p>
    <p>
      <strong>逻辑与</strong>
      和
      <strong>逻辑或</strong>
      在一些特殊的情形下会出现“互换”状态,就是说,要想表达实际意义的逻辑与或逻辑或,你得用相反的符号:
    </p>
    <pre><code>// 假设小军是研究生
let collegeStudent = false, graduateStudent = true;
// 外层条件:处理22~24岁年龄段,用逻辑与
if (age >= 22 && age <= 24) {
    // 里层条件:判断是大学生或研究生,本质逻辑或的写成逻辑与
    if (!collegeStudent && !graduateStudent) {
      console.log('no pass');
    } else {
      console.log('pass');
    }
}</code></pre>
    <p>
      里层判断两个子表达式使用了布尔值反转(!)附,表示否定,
      <code>!collegeStudent</code>
      意为非在读大学生,
      <code>!graduateStudent</code>
      意为非研究生,类似的,
      <code>!==</code>
      表示不等于,是否定状态的逻辑表达式,这时的复合表达式的粘连符号,表示“或者”时使用
      <code>&&</code>
      ,表示“与”时使用
      <code>||</code>
      ,和普通情形的使用恰恰相反。
    </p>
    <p>
      而符号
      <code>!</code>
      则为
      <strong>逻辑非</strong>
      的前导词或叫关键字,它用在布尔变量或单、双等号的前面,用来否定不是、不等于,等同于将布尔属性值进行意义反转。
    </p>
    <p>
      参与逻辑判断的关键字还有一个叫
      <strong>三元运算符</strong>
      ,它可以对三个值进行操作。例如,已知小军的年龄超过普通公民报名参军的最大年龄限制(现在我们假设它的年龄是25周岁),但他是研究毕业生,现在我们用三元运算符来判断他能否报名参军:
    </p>
    <pre><code>let age = 25, graduateStudent = true; // 25岁、研究生
console.log(graduateStudent ? 'pass' : 'no pass');</code></pre>
    <p>很高兴,通过。三元运算符是这么工作的,它分为三个部分:</p>
    <ol>
      <li>
            <code>graduateStudent ?</code>
            处理第一个变量值,问是否为研究生;
      </li>
      <li>
            <code>'pass' :</code>
            处理第二个变量,是研究生的话赋值 pass
      </li>
      <li>
            <code>'no pass'</code>
            ,处理第三个变量,不是研究生的话赋值 no pass
      </li>
    </ol>
    <p>
      就是说,问号
      <code>?</code>
      问前面的变量是否为真,若是,取其后面的值,冒号
      <code>:</code>
      表示否则,否则的话,则取其后值。
    </p>
    <p>逻辑判断主要就是以上讨论的这些:“与”、“或”、“非”、“三元”。绝大多数情形下使用它们会应该很简单,特殊情况下有时会很烧脑。但只要真正实践过,一切都将会非常明晰。# 布尔值与逻辑判断</p>
    <h2>3️⃣逻辑运算符的短路机制</h2>
    <p>逻辑运算符还可以用于短路设计,使得实现某种功能的代码更简洁而优雅。想象一下小军在填表时可能漏填了某个细节项目,例如忘记了填写或因为不是在校大学生而没有勾选“是否是在读大学生”栏目,此种情形,程序判断为不是在读大学生:</p>
    <pre><code>let collegeStudent = chkIsCollegeStudent.checked && true;
console.log(collegeStudent);</code></pre>
    <p>
      chkIsCollegeStudent 是一个复选框,如果勾选,则表达式
      <code>chkIsCollegeStudent.checked = true</code>
      ,不勾选值为 false;上述语句,使用
      <strong>逻辑与</strong>
      关键字
      <code>&&</code>
      表示短路:若复选框勾选,则返回 true(反之会返回false)。使
      <strong>逻辑或</strong>
      也可以打到相同的效果:
    </p>
    <pre><code>let collegeStudent = chkIsCollegeStudent.checked || false;
console.log(collegeStudent);</code></pre>
    <p>布尔值逻辑判断短路还有其它的机制或用途,这里就不展开讨论了。</p>
    <p>总而言之,逻辑判断主要就是以上讨论的这些:“与”、“或”、“非”和“三元”。绝大多数情形下使用它们应该都会很简单,特殊情况下有时会很烧脑——但只要真正实践过,一切都将会非常明晰。</p>
</div>

小辣椒 发表于 2026-2-19 21:52

不懂,坐沙发学习。{:4_174:}

马黑黑 发表于 2026-2-19 22:04

小辣椒 发表于 2026-2-19 21:52
不懂,坐沙发学习。

这个比叫抽象,不懂就是不懂了,没关系

小辣椒 发表于 2026-2-19 22:07

马黑黑 发表于 2026-2-19 22:04
这个比叫抽象,不懂就是不懂了,没关系

我确实是不懂,刚才那个视频坐按钮我明天做了,今天想早点下,有现成代码应该很快的

马黑黑 发表于 2026-2-19 22:17

小辣椒 发表于 2026-2-19 22:07
我确实是不懂,刚才那个视频坐按钮我明天做了,今天想早点下,有现成代码应该很快的

这类按钮你其实也用过的。只不过是一些CSS修饰。

小辣椒 发表于 2026-2-19 22:23

发现今天你发的我可以秒做,抄个作业,稍等。。。

霜染枫丹 发表于 2026-2-19 22:34

看到帖子,正和儿子在线闲聊。于是产生一个有趣的对话
问儿子:布尔值与逻辑判断是什么东东?

“你在论坛上看到的?“
“是的,认识字不知道在说啥,有用吗?“
“作用太大了,对傻娘而言知道这是一种简化复杂问题的过滤器即可,你们论坛说这个挺高大上的,与我离不开。“
“我有必要去了解吗“
“有难度,还是可以知道点表层,但对您没用,您都是用“拍脑袋“来作决定,对严谨的人需要“
{:4_172:}{:4_173:}{:4_199:}{:4_204:}

红影 发表于 2026-2-19 22:39

好像前面还行,越到后面越难懂。

红影 发表于 2026-2-19 22:50

其实应该之前用过的,只是不知道来龙去脉。{:4_204:}

马黑黑 发表于 2026-2-19 23:53

小辣椒 发表于 2026-2-19 22:23
发现今天你发的我可以秒做,抄个作业,稍等。。。

{:4_190:}

马黑黑 发表于 2026-2-19 23:54

霜染枫丹 发表于 2026-2-19 22:34
看到帖子,正和儿子在线闲聊。于是产生一个有趣的对话
问儿子:布尔值与逻辑判断是什么东东?



不编程的了解个大意即可

马黑黑 发表于 2026-2-19 23:56

红影 发表于 2026-2-19 22:39
好像前面还行,越到后面越难懂。

布尔值容易懂,布尔值的组合就抽象了,而布尔值用于逻辑判断通常都是复合性的就会更抽象,用逻辑判断做短路则更抽象。

马黑黑 发表于 2026-2-19 23:58

红影 发表于 2026-2-19 22:50
其实应该之前用过的,只是不知道来龙去脉。

很多地方都会用到布尔值和使用它来做逻辑判断,即使不编程。深入其中,可以弄懂其逻辑脉络。

红影 发表于 2026-2-20 22:22

马黑黑 发表于 2026-2-19 23:56
布尔值容易懂,布尔值的组合就抽象了,而布尔值用于逻辑判断通常都是复合性的就会更抽象,用逻辑判断做短 ...

对对,所以才越来越难懂了。

红影 发表于 2026-2-20 22:23

马黑黑 发表于 2026-2-19 23:58
很多地方都会用到布尔值和使用它来做逻辑判断,即使不编程。深入其中,可以弄懂其逻辑脉络。

是的,看得懂才能弄得明白。

霜染枫丹 发表于 2026-2-20 22:52

马黑黑 发表于 2026-2-19 23:54
不编程的了解个大意即可

我儿子还记得这个事情,今天问我学的怎样了,哈哈~~他说极少有在非专业论坛说这个问题。给我描述了几句,然后结论就是我看问题正确的不多,严谨按逻辑看问题基本不可能,知道了也做不到{:4_173:}

https://www.yueyijyw.com/data/attachment/forum/202602/17/130617xxpfiy7fxxyocefp.gif

马黑黑 发表于 2026-2-20 23:03

霜染枫丹 发表于 2026-2-20 22:52
我儿子还记得这个事情,今天问我学的怎样了,哈哈~~他说极少有在非专业论坛说这个问题。给我描述了几句, ...

正常的

马黑黑 发表于 2026-2-20 23:03

红影 发表于 2026-2-20 22:23
是的,看得懂才能弄得明白。

马黑黑 发表于 2026-2-20 23:03

红影 发表于 2026-2-20 22:22
对对,所以才越来越难懂了。

不过这个对理科生来说不是个问题

红影 发表于 2026-2-21 09:26

马黑黑 发表于 2026-2-20 23:03


又去读了一遍,理论是知道的,只是需要熟悉表达的方式。
页: [1] 2 3
查看完整版本: 布尔值与逻辑判断