js学习应边写边理解,变量(const/let/var)、数据类型(原始/引用)、类型转换(显隐式)、运算符与流程控制需串联掌握,避免碎片化。

直接上手练,边写边理解,别光看理论。JS 这块基础内容环环相扣,变量是起点,类型是底子,转换是桥梁,运算符是工具,流程控制是逻辑骨架——学得散就容易忘,串起来才记得牢。
变量:搞清 let / const / var 的实际区别
不是背定义,而是看场景:
- const 是首选:声明后不改的值(如 API 地址、配置项、DOM 元素引用),哪怕是个对象,也只保证“地址不变”,内部属性仍可修改;
- let 用于会重新赋值、且作用域明确的变量(比如 for 循环里的 i,或函数内计算中间值);
- var 基本不用:存在变量提升和函数级作用域问题,容易引发意料外的行为,除非维护老代码,否则跳过。
命名用小驼峰(userName、maxRetryCount),避免数字开头、保留字(如 class、default)。
数据类型:分清“存哪儿”和“怎么判”
两类本质差异:
- 原始类型(number、string、boolean、null、undefined、symbol、bigint):值直接存在栈中,赋值是拷贝值;
- 引用类型(object、array、function、date、regexp 等):变量存的是堆内存地址,赋值是拷贝地址,所以两个变量可能指向同一份数据。
判断类型别只靠 typeof:
- typeof null 返回 "object"(历史 bug,得单独处理);
- 数组用 Array.isArray(arr),对象用 Object.prototype.toString.call(obj) === "[object Object]";
- 函数统一用 typeof fn === "function" 最稳。
类型转换:记住高频隐式规则 + 显式方法组合
隐式转换常在 ==、+、!、逻辑运算中发生,容易出错,重点记这些:
- == 会先转类型再比较,=== 不转,一律用 ===;
- + 号遇字符串 → 全转字符串拼接(1 + '2' → '12');纯数字运算才做数学加法;
- 转数字优先用 Number()(严格)、parseInt()(取整,注意进制和首字母)或 parseFloat()(带小数);
- 转布尔快速写法:!!value,但要清楚哪些值是 falsy(0, '', null, undefined, NaN, false)。
运算符与流程控制:从表达式结果反推逻辑
别死记优先级,动手写几行就知道:
- 自增/自减:i++ 返回原值再加,++i 先加再返回,循环里多用 i++,赋值时看清顺序;
- 逻辑运算符返回的是操作数本身,不是 true/false:a && b 返回第一个 falsy 值或 b,a || b 返回第一个 truthy 值或 b —— 这个特性常用来设默认值(name || '匿名');
- 条件语句重点练嵌套和边界:if-else if-else 覆盖所有分支;switch 注意 break 和全等匹配;三元 condition ? a : b 适合简单分支,别嵌套三层以上。
不复杂但容易忽略。











