当前位置: 首页 > article >正文

前端面试-JavaScript 数据类型详解

目录

一、数据类型分类

二、核心区别对比

1. 存储方式

2. 比较方式

3. 类型检测方法

三、特殊类型详解

1. Symbol

2. BigInt

3. null vs undefined

四、常见面试扩展问题

五、总结


一、数据类型分类

JavaScript 数据类型分为 基本数据类型(原始类型) 和 引用数据类型(对象类型),共 8 种(截至 ES2023):

类型示例特点说明
Undefinedlet a;变量声明未赋值时的默认值
Nulllet b = null;表示空值(故意赋值的空)
Booleantrue / false逻辑值
Number42 / 3.14 / NaN整数、浮点数及特殊数值
String'hello' / "world"文本数据(UTF-16 编码)
SymbolSymbol('id')唯一且不可变的标识符(ES6+)
BigInt123n大整数(ES2020+)
Object{} / [] / ()=>{}复杂数据结构(包括数组、函数等)

二、核心区别对比
1. 存储方式
类型存储位置内存示意图
基本类型栈内存变量 → 值(直接存储)
引用类型堆内存(栈存指针)变量 → 地址指针 → 堆中的对象

示例

// 基本类型
let a = 10;
let b = a; // 值拷贝
b = 20;
console.log(a); // 10(互不影响)

// 引用类型
let obj1 = { name: 'John' };
let obj2 = obj1; // 指针拷贝
obj2.name = 'Alice';
console.log(obj1.name); // 'Alice'(指向同一对象)

2. 比较方式
类型比较行为示例
基本类型值相等即可5 === 5 → true
引用类型比较内存地址(是否同一对象){} === {} → false

特殊案例

NaN === NaN;          // false(唯一不等于自身的值)
Object.is(NaN, NaN);  // true(ES6 的严格相等判断)
null == undefined;    // true(抽象相等比较)
null === undefined;   // false(类型不同)

3. 类型检测方法
方法基本类型引用类型
typeof返回类型名(除 null返回 "object" 或 "function"
instanceof无效(始终 false检测构造函数原型链
Object.prototype.toString.call()精准判断所有类型

经典问题

typeof null;          // "object"(历史遗留问题)
typeof [1,2];         // "object"
typeof function(){};  // "function"

[] instanceof Array;  // true
({}) instanceof Object; // true

三、特殊类型详解
1. Symbol
  • 唯一性:相同参数的 Symbol 值不相等

    Symbol('key') === Symbol('key'); // false

  • 使用场景:对象唯一属性键、定义私有成员、替代魔法字符串

    const ID = Symbol('id');
    const user = { [ID]: 123 };

2. BigInt
  • 表示方法:数字后加 n 或使用 BigInt() 构造函数

    const bigNum = 9007199254740993n;

  • 特性:不可与普通 Number 混合运算(需显式转换)

3. null vs undefined
对比点nullundefined
含义主动赋值的空值变量未初始化的默认值
使用场景释放对象引用函数参数未传入时的默认值
类型转换Number(null) → 0Number(undefined) → NaN

四、常见面试扩展问题
  1. 深拷贝 vs 浅拷贝

    • 基本类型拷贝值,引用类型拷贝指针

    • 深拷贝实现:JSON.parse(JSON.stringify(obj))(局限:无法处理函数、循环引用)、递归克隆

  2. 包装对象(Boxing)
    基本类型调用方法时自动装箱:

    
    let str = 'hello';
    str.toUpperCase(); // 临时创建 String 对象

  3. 内存管理

    • 基本类型随执行上下文销毁

    • 引用类型依赖垃圾回收机制(标记清除、引用计数)


五、总结

理解 JavaScript 数据类型的关键在于:

  • 两大家族:基本类型(7种) vs 引用类型(Object)

  • 三大差异:存储方式、赋值行为、比较逻辑

  • 特殊成员Symbol 的唯一性、BigInt 的大数处理、null 与 undefined 的语义区别

掌握这些核心概念,能够帮助开发者避免常见陷阱(如意外修改引用类型数据),并写出更健壮的代码。


http://www.kler.cn/a/558142.html

相关文章:

  • asp.net mvc、webform 跨域问题
  • 手机怎样玩电脑游戏?
  • 搭建一个基于Django框架的WebApi项目
  • [Android]如何查看APK是使用的什么签名方案
  • 安全面试2
  • 单例模式代码示例
  • 力扣LeetCode:2595 奇偶位数
  • 根据音频中的不同讲述人声音进行分离音频 | 基于ai的说话人声音分离项目
  • 编译原理基础(1)
  • 语义向量模型全解:从基础到现在的deepseek中的语义向量主流模型
  • 【核心算法篇二十】《DeepSeek符号回归:让AI化身「数学神探」破解数据背后的宇宙公式》
  • go flag参数 类似Java main 的args
  • 报错:Cannot read properties of null (reading ‘ce‘)解决方法
  • MyBatisPlus学习
  • Python在实际工作中的运用-Excel数据统计和数据分析
  • 网页制作06-html,css,javascript初认识のhtml如何建立超链接
  • 怎样从零基础开始学习大模型
  • oppo,汤臣倍健,康冠科技,高途教育25届春招内推
  • go基本语法
  • MySQL 成本优化器 (CBO) 深度解析