新闻详情

新闻详情

首页 / 资讯中心 / 详情

Modern JavaScript Tutorial 实战:范围外判断的两种等价写法——NOT 变体与德摩根定律

发布时间:2026/10/1 9:57:18来源:尧图网络
Modern JavaScript Tutorial 实战:范围外判断的两种等价写法——NOT 变体与德摩根定律
文档/教程前端【免费下载链接】en.javascript.infoModern JavaScript Tutorial项目地址https://gitcode.com/gh_mirrors/en/en.javascript.info点击查看免费下载导读本文围绕 en.javascript.infoModern JavaScript Tutorial中逻辑运算符章节的经典练习题Check the range outside展开讲解如何用if条件判断age不在14到90含边界区间内并给出使用 NOT!与不使用 NOT 的两种等价写法。读完本文你将掌握区间边界判断、否定条件的正确展开方式以及逻辑运算符、||、!之间的运算优先级与德摩根定律在实际编码中的应用。任务还原题目要求与区间边界练习题原文位于 7-check-if-out-range/task.md需求如下Write anifcondition to check thatageis NOT between14and90inclusively. Create two variants: the first one using NOT!, the second one -- without it.要点拆解目标区间是14 ≤ age ≤ 90即inclusively含边界14和90本身属于范围内需要判断的是区间的补集age 14或age 90必须给出两个变体变体一使用逻辑非!对区间内的完整条件取反变体二不使用!直接写出否定后的条件。这个任务与其姊妹题Check the range between6-check-if-in-range/task.md要求判断age在14到90含边界之内互为镜像非常适合放在一起对照学习。标准解答官方给出的两个变体题目官方解答位于 7-check-if-out-range/solution.md共两个变体。变体一使用 NOT!if (!(age 14 age 90))先写出在区间内的条件age 14 age 90再用逻辑非!对整个括号表达式取反表示不在区间内。这里括号是必需的因为!的优先级是所有逻辑运算符中最高的——如果写成!age 14会先对age取布尔非再与14比较逻辑完全错误。变体二不使用 NOTif (age 14 || age 90)直接把否定条件展开成两个边界外判断的或组合age小于下界14或者大于上界90。两种写法的等价性德摩根定律变体一与变体二的等价性正是**德摩根定律De Morgans laws**在 JavaScript 中的直接体现!(A B) ≡ !A || !B !(A || B) ≡ !A !B将A (age 14)、B (age 90)代入第一条定律!(age 14 age 90) // 变体一 ≡ !(age 14) || !(age 90) // 应用德摩根定律 ≡ age 14 || age 90 // 比较运算符取反注意对比较表达式取反时变成变成这是双向的!(a b) ≡ a b!(a b) ≡ a b。与此同时区间内部的交集在取反后必须变为||并集而区间边界的比较符方向要翻转——这两步缺一不可。在语法层面age 14 || age 90之所以能简写为不加括号的形式是因为在 article.md 中明确的运算符优先级!的优先级最高高于||比较运算符又高于逻辑运算符因此age 14 || age 90天然被解析为(age 14) || (age 90)无需额外括号。结合教程章节本题用到的三个逻辑运算符本题虽短却完整覆盖了 逻辑运算符章节 中的三大核心运算AND——用于组合区间内条件在经典布尔逻辑中两者都为真才返回真。区间内判断age 14 age 90要求两个比较同时成立。还具有短路求值特性从左到右求值遇到第一个假值即停止并返回它本题中若age 14则age 90根本不会被执行。||OR——用于组合区间外条件||在经典逻辑中任一为真即返回真。区间外判断age 14 || age 90只要满足任一方向就越界。同样地||从左到右求值遇到第一个真值即短路返回若age 14已为真age 90不再求值。!NOT——对整个条件取反!是单目运算符先将其操作数转为布尔值再返回相反值!true为false!0为truearticle.md 中明确说明。变体一正是利用!对区间内这一布尔结果取反得到区间外。边界值与运行验证inclusively意味着边界14与90必须归属范围内因此设计测试用例时应覆盖四个关键区间点13下界外、14下界范围内、90上界范围内、91上界外外加一个中间值如50ageage 14 age 90age 14 || age 90结果13falsetrue区间外14truefalse区间内50truefalse区间内90truefalse区间内91falsetrue区间外可以看到两个变体在所有输入下结果完全一致——这正是等价性的实证。实际运行时可以将两种写法分别放入if并配合alert输出验证行为let age 13; // 变体一使用 NOT if (!(age 14 age 90)) { alert(Out of range (variant 1)); } // 变体二不使用 NOT if (age 14 || age 90) { alert(Out of range (variant 2)); }对照学习与区间内任务的镜像关系本题是 6-check-if-in-range 的镜像练习。区间内判断的标准解答为if (age 14 age 90)见 6-check-if-in-range/solution.md。两题连起来看区间判断的基本范式可以归纳为区间内if (age 下界 age 上界)区间外不用!if (age 下界 || age 上界)区间外用!if (!(age 下界 age 上界))。理解这个镜像关系后遇到含边界/不含边界范围内/范围外等需求就能直接套用而不会在边界比较符vs上出错。常见误区与优先级提醒误区一省略!后的括号// 错误示范 if (!age 14 age 90)!的优先级最高先执行!age结果是布尔值再与数字14比较逻辑完全偏离题意。取反一个复合条件时括号必须保留。误区二忘记翻转比较符方向// 错误示范只把 改成 ||比较符方向没翻转 if (age 14 || age 90)这个条件对所有age几乎恒为真任何数不是 14就是 90完全失去了判断意义。取反区间时必须变必须变。误区三混淆与||的优先级在 8-if-question/task.md 中还有一道综合题其中null || -1 1因优先级更高而等价于null || (-1 1) null || 1 1真值从而执行alert。这提醒我们当与||混用且依赖默认优先级时代码的可读性会下降。本题变体二age 14 || age 90只有同一优先级的两项无需担心而变体一中的!(...)括号则明确划定了取反的边界。误区四用/||替代if的炫技写法教程在 article.md 中专门警告过不要用或||当简短的if来用例如(x 0) alert(...)。虽然能工作但if意图更明显、可读性更好。区间判断场景下建议始终使用完整的if语句。小结Check the range outside虽然只是一个单行练习题却浓缩了 JavaScript 逻辑运算的多个关键知识点含边界区间的判断age 14 age 90取反的正确姿势!(age 14 age 90)括号不可省略德摩根定律!(A B) ≡ !A || !B从而得到免!变体age 14 || age 90运算符优先级!||比较运算符高于逻辑运算符边界值意识14与90归属范围内测试时应覆盖13/14/90/91四个关键点。这两种写法在工程实践中都很常见语义清晰时用!(...)表达不属于该范围追求简洁或与范围内分支并列时用展开式。理解它们为什么等价德摩根定律比记住写法本身更重要——这正是本练习想训练的能力。赞分享文档/教程前端【免费下载链接】en.javascript.infoModern JavaScript Tutorial项目地址https://gitcode.com/gh_mirrors/en/en.javascript.info点击查看免费下载相关推荐HAMi 设备支持矩阵与演进路线图从多厂商异构加速器接入到调度与可观测性规划HAMi 设备支持矩阵与演进路线图从多厂商异构加速器接入到调度与可观测性规划 导读 本文以 HAMi 仓库中的 roadmap.md https://link文档/教程前端Modern JavaScript Tutorial 任务实战用 JavaScript 编写 min(a, b) 求两数最小值Modern JavaScript Tutorial 任务实战用 JavaScript 编写 min a, b 求两数最小值 本篇文章围绕《Modern Ja文档/教程前端Modern JavaScript Tutorial深入理解 JavaScript 变量let / const / var 与命名规范Modern JavaScript Tutorial深入理解 JavaScript 变量let / const / var 与命名规范 变量是 JavaS文档/教程前端上一篇QMK 中 IS31FL3741 驱动深入解析I²C 39×9 LED 矩阵驱动器的配置、LED 映射与 API 实战下一篇Iosevka 22.0.0 变更深度解析variant selector 重排、西里尔与数学符号扩充及字形修复创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

RIP动态路由实验详解:拓扑规划、配置命令与故障切换 2026/10/1 10:45:49

RIP动态路由实验详解:拓扑规划、配置命令与故障切换

很多人第一次接触动态路由,都是从RIP开始的。这个协议名字听着古老,甚至被不少人戏称为“古董”,但它在动态路由的教学体系里依然占据着不可替代的位置。尤其是当你亲手搭建起三台路由器,看着路由表在没有人工干预的情况下自动学会…

阅读更多 →
RIPv2动态路由实验详解:从拓扑搭建到防环机制与排障实战 2026/10/1 10:45:49

RIPv2动态路由实验详解:从拓扑搭建到防环机制与排障实战

1. 实验背景与整体设计思路 1.1 为什么拿RIP开刀:动态路由的入门必修课 说起动态路由,很多人第一反应是OSPF、BGP这些"高端货",RIP往往被当成老古董。但我在带网络实验课和做项目排障的过程中,越来越觉得RIP是个被低估…

阅读更多 →
Codex与Claude Code Windows安装全攻略:从环境配置到VSCode接入 2026/10/1 10:45:49

Codex与Claude Code Windows安装全攻略:从环境配置到VSCode接入

把 Codex 和 Claude Code 都装进 Windows,这件事我前后折腾了三天。不是这两个工具本身有多难,而是网上教程要么只讲 macOS/Linux,要么把 VSCode 接入部分一笔带过,真正踩到坑的时候找不到人问。这篇文章把我实际跑通的流程、卡住…

阅读更多 →
Android Studio零基础开发笔记App完整教程:从建项目到打包APK 2026/10/1 10:45:49

Android Studio零基础开发笔记App完整教程:从建项目到打包APK

用Android Studio从零写一个笔记APP,是我最推荐新手走的一条路。最近有不少人私信我:安装包下好了但打不开、界面全英文看不懂、列表能显示但一编辑就崩溃……这些问题我早年全遇到过。这篇就按我实际操作的顺序,完整过一遍从新建项目到打包A…

阅读更多 →
Flutter for OpenHarmony实现收藏功能:状态同步与跨端通信实战 2026/10/1 10:45:49

Flutter for OpenHarmony实现收藏功能:状态同步与跨端通信实战

做微动漫App的时候,我给自己挖过一个坑:首页、详情页、我的页面都要用到收藏,一开始图省事在每个页面里各自setState,结果收藏状态到处不同步。详情页点完收藏,回到首页角标没变,再点进去发现按钮状态还是旧…

阅读更多 →
PDF前端打印原理与生产级解决方案 2026/10/1 10:45:43

PDF前端打印原理与生产级解决方案

1. 为什么“window.print()直接打印PDF”是个伪命题——从浏览器底层机制说起很多人在搜索“js实现直接打印pdf文件内容解决方案”时&#xff0c;第一反应就是写一行window.print()&#xff0c;然后把PDF塞进<iframe src"xxx.pdf">里完事。我最早也这么干过&am…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉