前端面试-JavaScript 数据类型详解
目录
一、数据类型分类
二、核心区别对比
1. 存储方式
2. 比较方式
3. 类型检测方法
三、特殊类型详解
1. Symbol
2. BigInt
3. null vs undefined
四、常见面试扩展问题
五、总结
一、数据类型分类
JavaScript 数据类型分为 基本数据类型(原始类型) 和 引用数据类型(对象类型),共 8 种(截至 ES2023):
| 类型 | 示例 | 特点说明 |
|---|---|---|
| Undefined | let a; | 变量声明未赋值时的默认值 |
| Null | let b = null; | 表示空值(故意赋值的空) |
| Boolean | true / false | 逻辑值 |
| Number | 42 / 3.14 / NaN | 整数、浮点数及特殊数值 |
| String | 'hello' / "world" | 文本数据(UTF-16 编码) |
| Symbol | Symbol('id') | 唯一且不可变的标识符(ES6+) |
| BigInt | 123n | 大整数(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
| 对比点 | null | undefined |
|---|---|---|
| 含义 | 主动赋值的空值 | 变量未初始化的默认值 |
| 使用场景 | 释放对象引用 | 函数参数未传入时的默认值 |
| 类型转换 | Number(null) → 0 | Number(undefined) → NaN |
四、常见面试扩展问题
-
深拷贝 vs 浅拷贝
-
基本类型拷贝值,引用类型拷贝指针
-
深拷贝实现:
JSON.parse(JSON.stringify(obj))(局限:无法处理函数、循环引用)、递归克隆
-
-
包装对象(Boxing)
基本类型调用方法时自动装箱:let str = 'hello'; str.toUpperCase(); // 临时创建 String 对象 -
内存管理
-
基本类型随执行上下文销毁
-
引用类型依赖垃圾回收机制(标记清除、引用计数)
-
五、总结
理解 JavaScript 数据类型的关键在于:
-
两大家族:基本类型(7种) vs 引用类型(Object)
-
三大差异:存储方式、赋值行为、比较逻辑
-
特殊成员:
Symbol的唯一性、BigInt的大数处理、null与undefined的语义区别
掌握这些核心概念,能够帮助开发者避免常见陷阱(如意外修改引用类型数据),并写出更健壮的代码。
相关文章:
前端面试-JavaScript 数据类型详解
目录 一、数据类型分类 二、核心区别对比 1. 存储方式 2. 比较方式 3. 类型检测方法 三、特殊类型详解 1. Symbol 2. BigInt 3. null vs undefined 四、常见面试扩展问题 五、总结 一、数据类型分类 JavaScript 数据类型分为 基本数据类型(原始类型&…...
【进程 】
【进程】 目录1. ELF格式程序与进程2. 进程的组织方式3. 进程的复刻(fork)4. 进程的状态 目录 1. ELF格式程序与进程 在Linux系统里,程序文件普遍采用ELF(Executable and Linkable Format)格式。这种格式的程序文件存…...
深入HBase——数据结构与算法
引入 通过前面的文章,我们对HBase已经有了基本认识,下面我们从HBase最核心的算法和数据结构进一步深入HBase。 HBase的一个列簇(Column Family)本质上就是一棵LSM树(Log-Structured Merge-Tree)。LSM树…...
Python爬虫实战:获取六图网漫画图
注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 Python 作为一种广泛应用于数据处理和网络爬虫领域的编程语言,拥有丰富的库和框架。其中,Scrapy 框架以其高效、灵活、可扩展等特点,成为构建爬虫程序的…...
HAProxy介绍与编译安装
目录 1、HAProxy介绍 2、HAProxy编译安装 Centos 基础环境 Ubuntu 基础环境 编译安装HAProxy 验证HAProxy版本 HAProxy启动脚本 配置文件 启动haproxy 验证haproxy状态 查看haproxy的状态页面 1、HAProxy介绍 HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年…...
全链路优化:如何让单点登录认证接口并发性能翻倍?
背景 最近针对一个单点登录认证项目进行性能优化,在 8核 16G 环境下的认证并发能力从每秒800次提升至每秒1600次,性能提升一倍,整理此次优化过程中的相关性能优化操作总结和大家分享一下。 Nginx配置优化 在并发认证场景下,Ngi…...
在Spring Boot中如何使用Freemaker模板引擎
在 Spring Boot 中使用 FreeMarker 模板引擎可以帮助你创建动态的 Web 页面。以下是详细的步骤和示例代码,介绍如何在 Spring Boot 项目里集成和使用 FreeMarker。 1. 添加依赖 如果你使用的是 Maven 项目,需要在 pom.xml 文件中添加 FreeMarker 相关依赖。Spring Boot 提供…...
Elasticsearch7.1.1 配置密码和SSL证书
生成SSL证书 ./elasticsearch-certutil ca -out config/certs/elastic-certificates.p12 -pass 我这里没有设置ssl证书密码,如果需要设置密码,需要再配置给elasticsearch 在之前的步骤中,如果我们对elastic-certificates.p12 文件配置了密码…...
个人简历html网页模板,科技感炫酷html简历模板
炫酷动效登录页 引言 在网页设计中,按钮是用户交互的重要元素之一。这样一款黑色个人简历html网页模板,科技感炫酷html简历模板,设计效果类似科技看板图,可帮您展示技能、任职经历、作品等,喜欢这种风格的小伙伴不要犹豫哦。该素材呈现了数据符号排版显示出人形的动画效…...
在LangFlow中集成OpenAI Compatible API类型的大语言模型
一、背景与核心价值 从Dify换到这个langflow真的时各种的不适应啊。 就比如这个OpenAI Compatible API,这不应该是基本操作嘛? 算了,服了,习惯了就好了。咱闲言少叙,正片开始: LangFlow作为LangChain的可视化开发工具,其最大优势在于无需编写代码即可构建复杂的大模型…...
Qt开发中有关内存管理方面常见的问题分析与解决方案
在Qt开发中,内存管理是一个既基础又关键的一部分知识。尽管Qt提供了自动化的父子对象管理机制,但在复杂的应用场景中(如多线程、动态UI、异步操作等),我们在开发过程中,仍可能遇到内存泄漏、野指针、重复释…...
【outOfMemoryError】排查思路与解决方案
前言 不好啦❗ 天塌了❗ 系统崩了❗ 快看啊,程序outOfMemoryError了🙈 我的心里活动:“哈哈哈😀哈哈哈😀终于给我碰上了,这个问题可很少发生啊,又积累一个问题。虽然我昨天发了版本࿰…...
Python蓝桥杯刷题-小数第n位详解
题目描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 0,它们就有了统一的形式。 本题的任务是:在上面的约定下,求整数除法小数点后的第 n 位开…...
Ubuntu服务器 /data 盘需要手动挂载的解决方案
服务器 /data 盘需要手动挂载的解决方案 如果重启服务器后,发现 /data 盘 没有自动挂载,通常是因为: /etc/fstab 配置文件 没有正确设置 自动挂载。该磁盘 没有被正确识别,需要手动挂载。文件系统错误 导致挂载失败。 下面是解…...
无法打开包括文件: “crtdbg.h”: No such file or directory
目录 无效解决措施(重装WindowsSDK) 有效解决措施 创建环境变量 添加环境变量INCLUDE 添加环境变量LIB RC无法运行 问题现象描述 复制以下文件至Error路径 无效解决措施(重装WindowsSDK) 参考文献:94176676/227706449-a5222d7d-d8d2-4a19-addb-8f546e69786f…...
番茄工作法html实现
对比了deepseek-r1-online和本地部署的14b的版本,输出的输出的html页面。 在线满血版的功能比较强大,可以一次完成所有要求。14b版本的功能有一些欠缺,但是基本功能也是写了出来了。 input write a html named Pomodoro-clock which “hel…...
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
多源 BFS 是一种解决 边权为 1 的多源最短路问题 的高效算法。其核心思想是将所有源点视为一个“超级源点”,通过一次 BFS 遍历即可计算所有节点到最近源点的最短距离。以下从原理、实现和代码示例三个方面深入讲解: 目录 一、原理分析 1. 单源 BFS vs…...
使用IDEA提交SpringBoot项目到Gitee上
登录Gitee并新建仓库 创建本地仓库 提交本地代码到本地仓库 提交本地代码到远程仓库...
我们来学人工智能 -- DeepSeek客户端
DeepSeek客户端 题记使用后记系列文章 题记 我选择了 Cherry Studio是国内产品由CherryHQ团队开源是一个平台在这里,有豆包、kimi、通义千问的入口当然,最主要是作为大模型的UI正如标题,这里,作为DeepSeep的客户端 使用 下载本…...
【Linux】匿名管道的应用场景-----管道进程池
目录 一、池化技术 二、简易进程池的实现: Makefile task.h task.cpp Initchannel函数: 创建任务: 控制子进程: 子进程执行任务: 清理收尾: 三、全部代码: 前言: 对于管…...
如何快速提升网盘下载速度:8大平台完整解决方案
如何快速提升网盘下载速度:8大平台完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...
Golang怎么CGO交叉编译_Golang如何在交叉编译时处理CGO依赖问题【避坑】
CGO_ENABLED0不能彻底解决交叉编译问题,仅适用于完全不依赖C库的项目;启用CGO时需严格匹配目标平台工具链、头文件及库路径,否则易导致静默失败。CGO_ENABLED0 不能解决所有交叉编译问题设成 CGO_ENABLED0 确实能绕过 CGO,但代价是…...
Java最全面试题及答案整理(牛客网最新版)
前言 面试,跳槽,每天都在发生,而对程序员来说"金三银四"更是面试和跳槽的高峰期,跳槽,更是很常见的,对于每个人来说,跳槽的意义也各不相同,可能是一个人更向往一个更大的…...
别再用Dijkstra处理负权边了!手把手教你用Bellman-Ford算法搞定带负权的最短路径问题
别再用Dijkstra处理负权边了!手把手教你用Bellman-Ford算法搞定带负权的最短路径问题 在算法竞赛和工程实践中,最短路径问题是最常见的图论挑战之一。许多开发者习惯性地使用Dijkstra算法解决所有最短路径问题,却忽视了负权边这一关键限制条件…...
容器跨主机通信总被劫持?Docker自定义网络隔离配置全解析,含8个可直接复用的docker-compose.yml模板
第一章:容器跨主机通信劫持问题的本质剖析容器跨主机通信劫持并非单纯网络配置失误,而是源于底层网络模型与容器运行时抽象层之间信任边界的模糊化。当容器通过 overlay 网络(如 VXLAN、Geneve)或第三方 CNI 插件实现跨节点通信时…...
重新定义四足机器人:openDogV2从机械执行到环境感知的颠覆性演进
重新定义四足机器人:openDogV2从机械执行到环境感知的颠覆性演进 【免费下载链接】openDogV2 项目地址: https://gitcode.com/gh_mirrors/op/openDogV2 在机器人技术快速发展的今天,开源四足机器人项目openDogV2正在重新定义智能机械伙伴的可能性…...
阿里Java面试速成指南,程序员2026突击必备!
2026已经过半了,但是大家就业压力却没有缓解多少。很多粉丝后台留言,Java程序员面临的竞争太激烈了……我自己也有实感,多年身处一线互联网公司,虽没有直面过求职跳槽的残酷,但经常担任技术面试考官,对程序…...
Kimi K2.6 深夜正式发布:对标 Opus 4.6,刷新开源编程天花板(2026.04.21)
🤵♂️ 个人主页:小李同学_LSH的主页 ✍🏻 作者简介:LLM学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
【仅限SRE/平台工程师】:Docker集群内核级调试——从dmesg异常到cgroup OOM killer触发链的完整溯源路径(含perf trace实操录屏要点)
第一章:Docker集群内核级调试——从dmesg异常到cgroup OOM killer触发链的完整溯源路径(含perf trace实操录屏要点)当Docker集群中突发容器静默退出且无应用层日志时,需立即切入内核视角定位根本原因。典型线索始于 dmesg -T | gr…...
CTF Pwn新手必看:用ROPgadget找pop rdi地址的保姆级教程(附常见坑点)
CTF Pwn实战指南:ROPgadget高效定位pop rdi的五大核心技巧 引言:为什么pop rdi是ROP链的黄金钥匙 在x64架构的CTF Pwn挑战中,pop rdi这条看似简单的指令往往成为解题的关键转折点。不同于x86时代通过栈传递参数的简单粗暴,x64体系…...
