JavaScript单元测试断言基本类型应先用typeof确认类型(注意null返回"object"需单独处理),再验证具体值;number需用Number.isFinite等进一步校验;null/undefined须明确区分;避免instanceof等不可靠方法。

在 JavaScript 单元测试中,断言基本数据类型(如 string、number、boolean、null、undefined、symbol)的关键是:先确认值的类型准确,再验证其具体值是否符合预期。不能只比对值,忽略类型差异;也不能依赖不可靠的方法(比如用 instanceof 判断数字)。
用 typeof 精准识别基本类型
typeof 是判断基本类型的首选工具,它返回字符串(如 "string"、"number"),且行为稳定、无跨环境问题。
-
typeof "abc"→"string" -
typeof 42→"number" -
typeof true→"boolean" -
typeof undefined→"undefined" -
typeof Symbol()→"symbol" -
typeof null→"object"(这是历史缺陷,需单独处理)
测试中可组合使用:
assert.strictEqual(typeof value, 'string', 'value 应为 string 类型');
区分 number 和 NaN / Infinity
基本类型 number 包含有效数字、NaN 和 Infinity,但多数业务场景只接受“有限数字”。因此需额外校验:
立即学习“Java免费学习笔记(深入)”;
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 用
Number.isFinite(value)确保是普通数字(排除NaN、Infinity) - 用
!isNaN(value)仅排除NaN(但允许Infinity) - 避免用
value === value判NaN——虽有效,但可读性差
例如:
assert.strictEqual(typeof input, 'number', '输入必须是 number 类型');<br>assert.ok(Number.isFinite(input), '输入必须是有限数字');
安全断言 null 和 undefined
二者语义不同,测试时应明确区分:
- 检查是否为
null:直接用全等=== null - 检查是否为
undefined:用=== undefined或typeof x === 'undefined' - 检查是否为
null或undefined(即“空值”):推荐x == null(松散相等),简洁且安全
示例:
assert.strictEqual(result, null, '函数应返回 null');<br>assert.strictEqual(typeof optionalParam, 'undefined', '可选参数未传入时应为 undefined');
避免常见陷阱
这些做法容易导致误判,应主动规避:
- 不用
instanceof Number判断数字——字面量42不是Number实例 - 不用
Object.prototype.toString.call(x) === '[object String]'断言基本字符串——过度复杂,typeof更直接 - 不混用
==和===做类型+值断言——应拆分为两步:先验类型,再验值 - 不依赖
constructor属性——基本类型无constructor,或易被篡改

















