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

[js] “===“ 及 typeof

"=== "是 JavaScript 的严格相等运算符,和 ==(宽松相等)有本质区别:

运算符行为
==会尝试类型转换后再比较
===值和类型都相等才为 true,不做类型转换

在本例中:
typeof window.drawPolyline === 'function'
typeof 的返回值永远是字符串(‘function’、‘undefined’、‘object’ 等)
和字符串 ‘function’ 比较,=== 直接比对,类型一致、值一致
如果写成 == 效果相同,因为两边都是 string 类型。但 === 是 JS 社区推荐做法——显式声明"我不需要类型转换",避免埋坑。

举个典型的坑:

0=='0'// true ← 字符串 '0' 被转成数字 00==='0'// false ← 类型不同,直接 false

所以在生产代码中统一用 === 是好习惯——明确、可预测
typeof 返回值表(共 8 种):

返回值触发条件示例
“undefined”未声明 / 已声明未赋值 / 显式赋 undefinedtypeof x、typeof undefined
“boolean”布尔值typeof true、typeof false
“number”数字(含 NaN、Infinity)typeof 42、typeof NaN、typeof Infinity
“bigint”BigInt 大整数typeof 1n、typeof BigInt(42)
“string”字符串typeof “hello”、typeof ‘’
“symbol”Symbol 唯一值typeof Symbol()、typeof Symbol.iterator
“function”函数(含 class)typeof function(){}、typeof class {}、typeof Math.max
“object”对象、数组、null、正则……typeof {}、typeof []、typeof null、typeof /a/

关键判断逻辑
typeof 本质上取的是 JS 引擎内部的 [[Type]] 标签,不是原型链推断:

值.内部类型标签 ──→ typeof 返回值
三个著名陷阱
① null 返回 “object”

typeofnull==="object"// true ← JS 历史 bug,永远如此

检查 null 必须用:

x===null

② 数组返回 “object”

typeof[1,2,3]==="object"// true

检查数组用:

Array.isArray([1,2,3])// true

③ NaN 返回 “number”

typeofNaN==="number"// true ← NaN 的类型是数字

typeof NaN === “number” // true ← NaN 的类型是数字

Number.isNaN(x)

undefined → “undefined”
null → “object” ← 陷阱
true/false → “boolean”
数字/NaN → “number”
1n → “bigint”
“str” → “string”
Symbol() → “symbol”
function → “function” ← 唯一的非 “object” 引用类型
其它全 → “object” ← 对象、数组、正则、null 都落这里

http://www.jsqmd.com/news/1093762/

相关文章:

  • 开源AI应用平台gstack部署与实战:从零搭建可视化工作流
  • 我从顺丰转行学AI产品经理·扒完招聘数据没敢盲目乐观
  • 深度解析|VLA、强化学习、世界模型,到底是什么关系?
  • CasaOS:十分钟搭建个人家庭云,旧电脑变全能服务器
  • PHP集成PGP加密实战:从GnuPG环境配置到文件签名验签
  • 5分钟快速上手OWASP Dependency-Check:命令行实战与CI/CD集成指南
  • D1117 低压差线性稳压电路
  • OpenMontage:从文本到视频的AI自动化生成框架实践指南
  • 【数据仓库】数仓常见问题治理
  • Agent-Reach:简化大模型API调用,构建稳定自动化流程
  • AI Agent沙箱是什么?跟Docker容器和虚拟机有什么区别
  • Kubernetes 工作负载与网络核心:从 Controller 到 Ingress 生产级实践
  • LoRA训练实战61:Krea2人物角色LoRA保姆级训练教程,几分钟捏出专属IP!
  • 一款H5播放器,搞定所有流媒体协议?EasyPlayer.js流媒体播放器到底有多强
  • 数据脱敏方法有哪些?一文盘点数据脱敏常用方法
  • OTA升级包签名被伪造,13万辆车被迫召回:签名链路安全怎么做才对?
  • 【车载】轮速-AK协议:从电流信号到车辆控制的解码之旅
  • 2026私域下半场:如何利用AI微信机器人打造专属的智能销冠?
  • Skills开源项目:为AI Agent提供标准化技能库,实现代码仓库自动化操作
  • 全球AI可见性基础建设:从“内容传播”到“AI信息标准协议”的重构
  • 海外信号覆盖不好怎么办?跨境IoT设备弱信号问题深度解析
  • AI 赋能接口自动化测试系列(二):全场景测试数据智能构造Agent Skill
  • Frida模块加载技术:从内存加载到对抗检测的实战指南
  • 后端架构演进:微服务与单体应用如何选择
  • 靠谱的2026年6月六安GEO优化选哪家
  • AI Agent多智能体系统在金融投资分析中的实战应用
  • 2026 年小程序开发公司推荐,靠谱服务商汇总
  • 内卷VS躺平VS转型:2026年程序员的第三条路
  • VMware虚拟机安装Ubuntu实践记录
  • 一键部署不是为了省时间 —— 它是把“买来的 PaaS“变成“自己的平台“的拐点