当前位置: 首页 > news >正文

JavaScript 的 “==” 存在的坑

  • == (双等) 指的是宽松相等 — 会做隐式类型转换
    • 举例:0 == '' // true '5' == 5 // true
  • ===(三等) 指的是严格相等类型和值都相等才 true
    • 举例:0 === '' // false '5' === 5 // false

在业务逻辑里经常因为隐式转换导致条件误判,业界普遍推荐 一律用 === / !==。

举例场景:判断用户是否从第 0 张滑块回到最后一张

① 错误版本 (用了 ==)

onChange(e) {const current   = e.detail.current;     // 数字 0、1、2…const source    = e.detail.source;      // 'touch' | 'autoplay'const pageCount = this.data.slides.length; // 假设 = 5// ❌ BUG:尝试判定「是手动触发 & current == 0」if (source == 'touch' && current == 0) {   // ← 坑点tt.showToast({ title: 'You are back to first page!' });}
}

source 是 字符串 ‘touch’,判断没问题;

current 是 数字 0 ,但是==是宽松相等。

  • 存在的问题:current 正常是数字 0,但若某次回调把它写成字符串 ‘00’、空字符 ’ '、或者 false,右侧是number类型,== 会把字符串’00’ 转成数字 0,再做比较
    • 导致current 是 '00' ' ' 和false的时候,current == 0的实际结果都是True!
  • 于是会把本不该弹的情况当成当前页=0,误弹提示。

在这里插入图片描述

② 正确版本 (统一类型 + 用 ===)

onChange(e) {const { current, source } = e.detail;const isTouchFirst = (source === 'touch' && current === 0);if (isTouchFirst) {tt.showToast({ title: 'You are back to first page!' });}
}

改用 ===,同时把常量也写成数字 0;

现在只有 “手动”+“current 为数字 0” 才会满足条件;

自动播放到第 0 页 (source === ‘autoplay’) 不会再误判。

★ 结论

  • 用 === / !==:让类型不符合时立即为 false,更早暴露错误;

  • 常量写成正确类型:数字用 0,字符串用 ‘0’,别混;

  • 小程序事件对象字段(detail.current、detail.source…)要先确认 准确类型,再写比较。

http://www.lryc.cn/news/573959.html

相关文章:

  • 跨域视角下强化学习重塑大模型推理:GURU框架与多领域推理新突破
  • TypeScript类型定义:Interface与Type的全面对比与使用场景
  • 线程池异步处理
  • 分布式ID生成方式及优缺点详解
  • 【Datawhale组队学习202506】YOLO-Master task03 IOU总结
  • uni-app项目实战笔记23--解决首次加载额外图片带来的网络消耗问题
  • 人工智能、机器人最容易取哪些体力劳动和脑力劳动
  • day03-微服务01
  • 《Nature Commun》(中科院1区, IF17.694): CITE-seq+空间转录组解析SSc免疫异质性
  • MySQL学习(1)——基础库操作
  • 【C++开发】CMake构建工具
  • 系统思考:救火先放火
  • (线性代数最小二乘问题)Normal Equation(正规方程)
  • 【边缘计算】ECA、ECN、ECI
  • 逆向某物 App 登录接口:还原 newSign 算法全流程
  • springboot 提供的可扩展接口
  • Element表格表头合并技巧
  • 30天pytorch从入门到熟练(day1)
  • VS2019调试进入FFmpeg源码
  • Vulkan 学习笔记15—Mipmap 与多重采样
  • 【webSocket】WebSocket全双工通信实战指南
  • 从零开始手写redis(15)实现自己的 HashMap
  • java专题漏洞总结 + 靶场练习
  • 【学习笔记】深入理解Java虚拟机学习笔记——第10章 前端编译与优化
  • RA4M2开发IOT(10)----集成LPS22DF气压计
  • 扫雷中的数学原理
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月22日第116弹
  • 64-Oracle Redo Log
  • 肖臻《区块链技术与应用》第六讲:比特币网络
  • 点点(小红书AI搜索):生活场景的智能搜索助手