JavaScript 语言基础与类型系统
JavaScript 是一门动态类型、弱类型的语言:变量不绑定类型、值在运算时会被悄悄转换。这套「灵活」既是它上手快的原因,也是无数 Bug 的温床——"37" - 7 得 30、"37" + 7 得 "377"、0.1 + 0.2 !== 0.3、typeof null 是 "object"、[] == ![] 居然为 true。本叶把「变量怎么声明、有哪些类型、值怎样转换与比较、运算符全谱、控制流、以及 strict mode 与那些历史怪癖」一次讲透,让你看懂引擎在背后到底做了什么。
概述
- 它管什么:用
var/let/const声明变量(作用域、提升、TDZ);7 种原始类型 + 对象;类型之间的隐式 / 显式转换;==/===/Object.is三套相等语义;算术 / 逻辑 / 位 / 三元 / 可选链 / 空值合并等运算符;if/switch/ 循环等控制流;strict mode 收紧的那些松散行为。 - 为什么值得认真学:这些是所有 JavaScript 代码的地基——框架、库、Node、浏览器脚本无一例外都建立在这套规则上。不懂类型转换与相等语义,调试就只能靠猜;理解了,那些「玄学 Bug」会瞬间变得有迹可循。
- 现代化关注点:
let/const取代var(ES2015)、指数运算符**(ES2016)、可选链?.与空值合并??(ES2020)、逻辑赋值&&=/||=/??=(ES2021)、BigInt(ES2020)、数字分隔符_(ES2021);以及 ES module / class 默认 strict mode 带来的「现代代码天然更安全」。
本叶地图
- 入门 —— 一段「现代且类型安全」的代码骨架,逐块讲清声明、类型、转换、相等的核心取舍
- 变量声明:var / let / const —— 三种声明、作用域、提升机制与暂时性死区(TDZ)
- 原始类型与包装对象 —— 7 种原始类型逐一拆解,以及
String/Number/Boolean包装对象的自动装箱 - 类型转换与相等比较 —— 显隐式转换、
==vs===、Object.is、NaN坑、truthy / falsy 全表 - 运算符全谱 —— 算术 / 逻辑 / 位 / 三元 /
?./??/**,以及短路求值与运算符优先级 - 控制流与循环 ——
if/switch、三种循环、for...ofvsfor...in、break/continue与标签 - strict mode 与历史怪癖 —— 严格模式收紧了什么、
typeof null、自动分号插入(ASI)等历史包袱 - 参考 —— 速查表 + 标准 / Baseline / 调试工具链接
文档地址
- MDN: JavaScript Guide — Grammar and types
- MDN: Expressions and operators
- MDN: Equality comparisons and sameness
- javascript.info: JavaScript Fundamentals