布尔值与逻辑判断
<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> 不懂,坐沙发学习。{:4_174:} 小辣椒 发表于 2026-2-19 21:52
不懂,坐沙发学习。
这个比叫抽象,不懂就是不懂了,没关系 马黑黑 发表于 2026-2-19 22:04
这个比叫抽象,不懂就是不懂了,没关系
我确实是不懂,刚才那个视频坐按钮我明天做了,今天想早点下,有现成代码应该很快的 小辣椒 发表于 2026-2-19 22:07
我确实是不懂,刚才那个视频坐按钮我明天做了,今天想早点下,有现成代码应该很快的
这类按钮你其实也用过的。只不过是一些CSS修饰。 发现今天你发的我可以秒做,抄个作业,稍等。。。 看到帖子,正和儿子在线闲聊。于是产生一个有趣的对话
问儿子:布尔值与逻辑判断是什么东东?
“你在论坛上看到的?“
“是的,认识字不知道在说啥,有用吗?“
“作用太大了,对傻娘而言知道这是一种简化复杂问题的过滤器即可,你们论坛说这个挺高大上的,与我离不开。“
“我有必要去了解吗“
“有难度,还是可以知道点表层,但对您没用,您都是用“拍脑袋“来作决定,对严谨的人需要“
{:4_172:}{:4_173:}{:4_199:}{:4_204:}
好像前面还行,越到后面越难懂。 其实应该之前用过的,只是不知道来龙去脉。{:4_204:} 小辣椒 发表于 2026-2-19 22:23
发现今天你发的我可以秒做,抄个作业,稍等。。。
{:4_190:} 霜染枫丹 发表于 2026-2-19 22:34
看到帖子,正和儿子在线闲聊。于是产生一个有趣的对话
问儿子:布尔值与逻辑判断是什么东东?
不编程的了解个大意即可 红影 发表于 2026-2-19 22:39
好像前面还行,越到后面越难懂。
布尔值容易懂,布尔值的组合就抽象了,而布尔值用于逻辑判断通常都是复合性的就会更抽象,用逻辑判断做短路则更抽象。 红影 发表于 2026-2-19 22:50
其实应该之前用过的,只是不知道来龙去脉。
很多地方都会用到布尔值和使用它来做逻辑判断,即使不编程。深入其中,可以弄懂其逻辑脉络。 马黑黑 发表于 2026-2-19 23:56
布尔值容易懂,布尔值的组合就抽象了,而布尔值用于逻辑判断通常都是复合性的就会更抽象,用逻辑判断做短 ...
对对,所以才越来越难懂了。 马黑黑 发表于 2026-2-19 23:58
很多地方都会用到布尔值和使用它来做逻辑判断,即使不编程。深入其中,可以弄懂其逻辑脉络。
是的,看得懂才能弄得明白。 马黑黑 发表于 2026-2-19 23:54
不编程的了解个大意即可
我儿子还记得这个事情,今天问我学的怎样了,哈哈~~他说极少有在非专业论坛说这个问题。给我描述了几句,然后结论就是我看问题正确的不多,严谨按逻辑看问题基本不可能,知道了也做不到{:4_173:}
https://www.yueyijyw.com/data/attachment/forum/202602/17/130617xxpfiy7fxxyocefp.gif
霜染枫丹 发表于 2026-2-20 22:52
我儿子还记得这个事情,今天问我学的怎样了,哈哈~~他说极少有在非专业论坛说这个问题。给我描述了几句, ...
正常的 红影 发表于 2026-2-20 22:23
是的,看得懂才能弄得明白。
对 红影 发表于 2026-2-20 22:22
对对,所以才越来越难懂了。
不过这个对理科生来说不是个问题 马黑黑 发表于 2026-2-20 23:03
对
又去读了一遍,理论是知道的,只是需要熟悉表达的方式。