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

前端面试-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 的语义区别

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

相关文章:

前端面试-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了🙈 我的心里活动:“哈哈哈😀哈哈哈😀终于给我碰上了,这个问题可很少发生啊,又积累一个问题。虽然我昨天发了版本&#xff0…...

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函数: 创建任务: 控制子进程: 子进程执行任务: 清理收尾: 三、全部代码: 前言: 对于管…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...