面试题:JavaScript 有哪些数据类型?它们的区别是什么?

JavaScript 的数据类型可以分为两大类:原始类型(Primitive Types)对象类型(Object Type)


一、原始类型(Primitive Types)

原始类型是不可变的(immutable),存储在栈内存中。它们的值直接存储在变量中。

1. string(字符串)

  • 表示文本数据。
  • 用单引号、双引号或反引号(模板字符串)定义。
  • 示例"hello", 'world', `template ${var}`

2. number(数字)

  • 表示整数、浮点数、NaNInfinity-Infinity
  • 所有数字在 JavaScript 中都是 64 位双精度浮点数(IEEE 754)。
  • 示例42, 3.14, NaN, Infinity

3. boolean(布尔值)

  • 表示逻辑值:truefalse
  • 示例true, false

4. undefined(未定义)

  • 表示变量已声明但未赋值,或对象属性不存在。
  • 是其自身的类型。
  • 示例
  let x;
  console.log(x); // undefined

5. null(空值)

  • 表示“有意的空值”或“无对象”。
  • 是一个原始值,但 typeof null 返回 "object"(历史 bug)。
  • 示例let user = null;

6. symbol(符号,ES6 引入)

  • 表示唯一的、不可变的值,常用于对象属性键,避免命名冲突。
  • 示例
  const id = Symbol('id');
  const obj = { [id]: '123' };

7. bigint(大整数,ES2020 引入)

  • 表示任意精度的整数,用于超出 Number.MAX_SAFE_INTEGER 的大数。
  • 通过在整数后加 n 创建。
  • 示例123n, BigInt(9007199254740991)

原始类型共 7 种string, number, boolean, undefined, null, symbol, bigint


二、对象类型(Object)

  • 对象是可变的(mutable),存储在堆内存中,变量中存储的是指向对象的引用。
  • 包括:
    • 普通对象 {}new Object()
    • 数组 []new Array()
    • 函数 function() {}new Function()
    • 日期 new Date()
    • 正则表达式 /abc/
    • Map, Set, WeakMap, WeakSet 等 ES6 新增结构

⚠️ 注意:函数在 JavaScript 中是一等公民,是对象的一种特殊类型。


三、关键区别对比

特性原始类型(Primitives)对象类型(Objects)
存储方式栈内存(直接存储值)堆内存(存储引用,值在堆中)
可变性不可变(immutable)可变(mutable)
赋值行为值传递(复制值)引用传递(复制引用)
typeof 返回值各自的类型(如 "string""object"(函数除外,返回 "function"
相等比较值相等(=== 比较值)引用相等(=== 比较是否是同一对象)
原型原始值有对应的包装对象(如 String, Number),但自动装箱有原型链(__proto__

示例:值传递 vs 引用传递

// 原始类型:值传递
let a = 10;
let b = a;
b = 20;
console.log(a); // 10(a 不受影响)

// 对象类型:引用传递
let obj1 = { name: "Alice" };
let obj2 = obj1;
obj2.name = "Bob";
console.log(obj1.name); // "Bob"(obj1 被修改)

四、如何判断数据类型?

方法说明
typeof value适用于原始类型(但 typeof null === "object" 是 bug)
Array.isArray(value)判断是否为数组
value instanceof Constructor判断对象是否为某构造函数的实例
Object.prototype.toString.call(value)最可靠,可精确判断所有内置类型

五、总结

问题回答
JavaScript 有哪些数据类型?7 种原始类型string, number, boolean, undefined, null, symbol, bigint1 种对象类型object(包含数组、函数、日期等)
核心区别原始类型是不可变的值,对象是可变的引用

一句话:JavaScript 有 7 种原始类型和 1 种对象类型,区别在于存储方式、可变性和赋值行为。原始类型按值传递,对象按引用传递。

THE END
喜欢就支持一下吧
点赞13 分享