
本文深入探讨j*ascript条件判断中常见的两个误区:将数字类型误用于字符串方法,以及逻辑或(`||`)运算符在否定条件中的错误应用。通过一个电话号码前缀验证的案例,文章将详细阐述如何正确声明变量为字符串类型,并巧妙运用逻辑与(`&&`)运算符来构建精确的否定条件,以确保代码逻辑的严谨性和准确性,避免常见的逻辑陷阱。
在J*aScript编程中,数据类型是基础且关键的概念。一个常见的错误是将数值类型误认为字符串类型,并尝试在其上调用字符串特有的方法。例如,substring() 是 String 对象原型上的方法,用于提取字符串的一部分。如果在一个数字变量上调用 substring(),J*aScript会首先尝试将该数字隐式转换为字符串。然而,这种隐式转换可能导致不可预测的行为,尤其是在涉及以0开头的数字时,J*aScript可能会将其解释为八进制(如果所有数字都是0-7)或直接忽略前导零作为十进制处理,从而无法得到预期的字符串前缀。
例如,原始代码中的 var momo_no = 0759933091; 声明了一个数字变量。即使J*aScript最终可能将其转换为字符串来执行 substring,但更规范和安全的方式是直接将其声明为字符串类型,例如 var momo_no = "0759933091";。这样可以明确变量的意图,并确保 substring() 方法能够正确、稳定地工作。
另一个在条件判断中常见的逻辑错误是混淆了逻辑或(||)和逻辑与
(&&)运算符在否定条件中的作用。考虑以下表达式:
A != X || A != Y || A != Z
这个表达式的逻辑是:“A不等于X”或者“A不等于Y”或者“A不等于Z”。如果 A 是一个具体的值,例如 A = X,那么 A != X 为 false。但是,此时 A != Y 和 A != Z 都会为 true(假设 X、Y、Z 是不同的值),因此整个表达式的结果将是 false || true || true,最终为 true。这意味着无论 A 等于 X、Y 还是 Z,或者其他任何值,这个条件判断都将永远返回 true。这是因为 A 不可能同时等于多个不同的值,所以它至少会不等于其中一个,从而使得 || 表达式中的一个子条件为真。
要实现“A不等于X,并且不等于Y,并且不等于Z”的逻辑,我们应该使用逻辑与(&&)运算符:
A != X && A != Y && A != Z
这个表达式的逻辑是:“A不等于X”并且“A不等于Y”并且“A不等于Z”。只有当 A 不等于所有列出的值时,整个表达式才为 true。这正是我们进行排除性判断时所需要的逻辑。
结合上述两点,对原始代码进行修正后,可以得到以下正确实现电话号码前缀验证的J*aScript代码:
万相营造
阿里妈妈推出的AI电商营销工具
168
查看详情
var momo_no = "0759933091"; // 明确声明为字符串类型
if (
momo_no.substring(0, 3) !== "075" && // 使用严格不等于 !==
momo_no.substring(0, 3) !== "070" &&
momo_no.substring(0, 3) !== "074" &&
momo_no.substring(0, 3) !== "077" &&
momo_no.substring(0, 3) !== "078" &&
momo_no.substring(0, 3) !== "076" &&
momo_no.substring(0, 3) !== "039"
) {
alert("FALSE"); // 如果前缀不匹配任何一个允许的值,则返回 FALSE
} else {
alert("TRUE"); // 如果前缀匹配其中一个允许的值,则返回 TRUE
}注意事项:
为了进一步优化和简化上述条件判断,我们可以采用更现代的J*aScript特性。
使用 startsWith() 方法:
var momo_no = "0759933091";
// 检查是否以特定前缀开头
if (
!momo_no.startsWith("075") &&
!momo_no.startsWith("070") &&
!momo_no.startsWith("074") &&
!momo_no.startsWith("077") &&
!momo_no.startsWith("078") &&
!momo_no.startsWith("076") &&
!momo_no.startsWith("039")
) {
alert("FALSE");
} else {
alert("TRUE");
}使用数组和 includes() 方法(推荐):
当有多个允许或不允许的前缀时,将它们放入一个数组中,然后使用 includes() 方法可以极大地提高代码的可读性和维护性。
var momo_no = "0759933091";
var allowedPrefixes = ["075", "070", "074", "077", "078", "076", "039"];
// 提取前三位
var prefix = momo_no.substring(0, 3);
// 如果允许的前缀数组中不包含当前前缀,则返回 FALSE
if (!allowedPrefixes.includes(prefix)) {
alert("FALSE");
} else {
alert("TRUE");
}这种方法不仅代码量更少,而且当需要添加或删除允许的前缀时,只需修改 allowedPrefixes 数组即可,无需改动条件判断的逻辑结构。
在J*aScript中编写健壮的条件判断,需要对数据类型有清晰的认识,并正确运用逻辑运算符。将数值误用作字符串,以及在否定条件中错误使用逻辑或(||)运算符,是导致代码逻辑缺陷的常见原因。通过明确变量类型、选择正确的逻辑运算符,并利用 startsWith() 或结合数组与 includes() 等现代J*aScript特性,我们可以编写出更精确、更简洁、更易于维护的代码。理解并避免这些陷阱,是提升J*aScript编程技能的关键一步。
以上就是J*aScript条件判断中的常见陷阱:数据类型与逻辑运算符的正确使用的详细内容,更多请关注其它相关文章!
相关文章:
抖音网页版平台入口 抖音网页版官网在线访问教程
圆通快递查询实时追踪 圆通物流包裹状态快速查看
如何在Promise链中有效终止错误处理后的执行
BetterDiscord插件中安全更新用户简介的实践指南
Promise错误处理:在catch后终止链式then执行的策略
Typer应用中灵活处理命令行参数的令牌化与解析
邮政快递包裹最新位置 邮政快递实时追踪入口
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
Win11怎么开启省电模式_Win11电池节电模式自动开启
iCloud登录入口网页版 苹果iCloud官网登录
J*a最大堆Heapify方法修复:索引计算与边界条件深度解析
uc浏览器网页版入口 uc浏览器网页版最新网址
yy漫画网页版官方入口_yy漫画官网登录页面链接
深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
提升Kafka消费者健壮性:会话超时处理与消息处理语义
mysql备份恢复性能优化_mysql备份恢复性能优化方法
Python getattr() 异常处理深度解析:避免程序意外退出
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画
支付宝如何设置安全保护_支付宝安全设置的全面教程
蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址
Spyder启动失败:字体文件权限拒绝错误解决方案
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
J*aScript教程:根据元素文本内容动态设置背景色
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
必由学官方登录入口 必由学教师学生账号快速访问
CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示
Go语言中高效处理x-www-form-urlencoded表单数据
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
EMS快递官网app_中国邮政速递物流手机客户端
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新
Mac怎么使用表情符号_Mac Emoji快捷键面板
AO3官网镜像链接 Archive of Our Own同人文在线浏览
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
漫蛙2网页版漫画入口 漫蛙漫画在线官方登录
ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门
将PCM16音频数据转换为W*并编码为Base64教程
Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】
可靠CSGO开箱平台解析 CSGO开箱网合集
2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示
漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
c++中为什么推荐使用using替代typedef_c++现代化类型别名
J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析