学习前提

会打开浏览器Console;本课从值和类型开始,不要求先学异步。

本课完成后你能做什么

区分值的类型和变量的绑定,解释为什么表单里的数字相加会变成拼接。

先理解机制

JavaScript 的值包括字符串、数字、布尔值、undefined、null、BigInt、Symbol,以及对象。typeof 是初步检查工具,不是完整类型验证器:typeof null 是 object,数组应使用 Array.isArray 判断。变量保存值或对象引用,类型属于值。

const 阻止重新绑定,不会冻结对象内部。let 用于确实会重新赋值的绑定。优先 const 能让读者更容易找出状态变化。两个变量引用同一个对象时,通过任何一个变量修改属性,另一个都会看到;展开运算符只复制一层。

input.value 总是字符串。先 trim 检查空值,再 Number 转换,再用 Number.isFinite 检查有限数。Number(空字符串) 会得到 0,因此仅检查 NaN 不足以表达必填。=== 不进行宽松类型转换;金额通常先转换为整数最小单位再计算。

可运行示例

const raw = " 12.5 ";
const value = Number(raw);
const valid = raw.trim() !== "" && Number.isFinite(value);
console.log(typeof raw, typeof value, valid);
console.log("12" + 3, Number("12") + 3);
const first = { done: false };
const second = first;
second.done = true;
console.log(first.done);

推演与验证

依次预测再运行:string number true;字符串123与数字15;最后 true。把 raw 改成空格、abc、Infinity,检查 valid 都为 false。注意修改 raw 后要重新执行整段代码。

常见错误与边界

不要用 if(value) 判断数字是否合法,因为 0 是合法但假值。浮点数存在表示误差,0.1+0.2 不严格等于0.3;展示时保留小数并不改变内部精度。

动手练习

写 parseScore:空输入、非数字和超出0到100返回 null,否则返回数字。测试0、100、空格和101。

参考解法与理由

先排除空字符串,随后检查有限性与范围。用 null 表示失败,调用者需显式比较,不要误把0判成失败。

function parseScore(raw) {
  if (raw.trim() === "") return null;
  const n = Number(raw);
  return Number.isFinite(n) && n >= 0 && n <= 100 ? n : null;
}

进一步阅读