JavaScript 中的 number(小写)是原始类型,Number(大写)是构造函数;前者存于栈、不可修改,后者创建对象存于堆;TypeScript 中应使用 number 类型注解,避免 Number。

JavaScript 中的 Number 类型(小写 number)和 Number 对象包装器(大写 Number)本质不同:一个是原始数据类型,一个是引用类型的构造函数。混淆两者容易引发类型判断、相等比较或类型注解上的问题。
类型本质:原始值 vs 包装对象
原始 number 是 JavaScript 六种基本类型之一(如 42、3.14、-0),直接存于栈中,不可修改,也没有自有属性或方法;而 Number 是内置构造函数,调用 new Number(42) 会创建一个包装对象,属于 Object 类型,存在于堆内存中。
-
typeof 42→"number" -
typeof Number(42)→"number"(注意:这不是 new,是类型转换) -
typeof new Number(42)→"object"
行为差异:相等性与方法调用
虽然 42 === Number(42) 为 true,但 42 === new Number(42) 为 false——因为后者是对象,类型不匹配。不过,JavaScript 在访问方法(如 .toFixed())时会自动进行“临时包装”:当你对原始数字调用 (42).toFixed(2),引擎会在运行时短暂创建一个 Number 实例执行方法,之后立即销毁,不留下对象痕迹。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 原始数字不能添加属性:
let n = 42; n.custom = true; console.log(n.custom)→undefined - Number 对象可以(但不推荐):
let obj = new Number(42); obj.custom = true; console.log(obj.custom)→true - 所有数字方法(
toString()、toPrecision()、toLocaleString()等)都定义在Number.prototype上,供包装机制调用
TypeScript 类型注解中的大小写陷阱
在 TypeScript 中,number(小写)是标准基础类型,用于变量、参数、返回值的类型声明;而 Number(大写)代表 JavaScript 的构造函数类型,对应 new Number(...) 的实例,在类型系统中属于对象类型,几乎从不用于日常类型标注。
立即学习“Java免费学习笔记(深入)”;
- ✅ 推荐:
let count: number = 100; - ❌ 不推荐:
let count: Number = new Number(100);(TS 编译器会警告,且语义冗余) - ⚠️ 注意:
Number(123)作为函数调用是安全的类型转换,但Number本身不是类型别名
实际开发建议
绝大多数场景下应坚持使用原始 number 值和小写类型注解。仅在极少数需要显式操作包装对象的边界情况(如检查是否为 Number 实例、重写原型方法调试)才接触 new Number(),而这类需求在现代前端开发中基本不存在。
- 转换字符串为数字优先用
Number(str)或一元加号+str,而非new Number(str) - 避免
instanceof Number判断,改用typeof x === 'number' && !isNaN(x) - 工具函数中若需兼容对象形式数字,先用
Number(value)归一化为原始值再处理

















