js类型实现
JavaScript 类型实现
JavaScript 是一种动态类型语言,其类型系统在运行时确定。以下是 JavaScript 中类型的实现方式:
原始类型(Primitive Types)
JavaScript 有 7 种原始数据类型,这些类型是不可变的,直接存储在栈内存中。
- number:用于表示整数和浮点数,例如
42或3.14。 - string:用于表示文本数据,例如
"hello"。 - boolean:表示逻辑值
true或false。 - null:表示空值或无值。
- undefined:表示未定义的值。
- symbol(ES6 引入):表示唯一的标识符。
- bigint(ES11 引入):用于表示任意精度的整数。
对象类型(Object Types)
对象类型是可变的,存储在堆内存中,通过引用访问。包括:
- Object:普通对象,例如
{ key: "value" }。 - Array:数组,例如
[1, 2, 3]。 - Function:函数,例如
function() {}。 - Date、RegExp、Error 等内置对象。
类型检查
JavaScript 提供了几种方式检查变量类型:
-
typeof 操作符:返回类型的字符串表示。

typeof 42; // "number" typeof "hello"; // "string" typeof true; // "boolean" typeof undefined; // "undefined" typeof null; // "object"(历史遗留问题) typeof Symbol(); // "symbol" typeof 1n; // "bigint" typeof {}; // "object" typeof []; // "object" typeof function() {}; // "function" -
instanceof 操作符:检查对象是否为某个构造函数的实例。
[] instanceof Array; // true new Date() instanceof Date; // true -
Object.prototype.toString:更精确的类型检查。
Object.prototype.toString.call([]); // "[object Array]" Object.prototype.toString.call(null); // "[object Null]"
类型转换
JavaScript 是弱类型语言,支持隐式和显式类型转换。

-
隐式转换:在操作中自动转换类型。
"5" + 2; // "52"(字符串拼接) "5" - 2; // 3(转换为数字) -
显式转换:通过函数或操作符强制转换。
Number("42"); // 42 String(42); // "42" Boolean(0); // false
ES6 新增类型特性
-
Symbol:创建唯一值,常用于对象属性键。
const sym = Symbol("description"); const obj = { [sym]: "value" }; -
BigInt:处理大整数。
const bigNum = 9007199254740991n;
类型增强工具
- TypeScript:为 JavaScript 添加静态类型检查。
let num: number = 42; let str: string = "hello";
JavaScript 的类型系统灵活但容易出错,理解其实现方式有助于编写更健壮的代码。






