JavaScript 前端面试 1 (数据类型、数据结构)

ops/2025/2/22 0:13:39/

一:JavaScript中有哪些数据类型?在存储上的差异?

JavaScript的数据类型分为两类:基本类型引用类型

两者的区别是存储位置不同

1:基本类型

基本类型有以下六种:

Number数字类型,用于表示整数或浮点数。
String字符串类型,用于表示文本数据
Boolean布尔类型,用于表示 true 或 false。
Undefined未定义类型,表示变量未初始化。
null空值类型,表示一个空值。
symbol(ES6 新增):符号类型,用于创建唯一的、不可变的数据类型。

注:其实还有 BigInt(ES11 新增):大整数类型,用于表示大于 2^53 - 1 的整数。在此不做学习目标

1.1 Number类型:

数值最常见的整数类型格式为十进制,还可以设置八进制(0开头)、十六进制(0x开头)

浮点型在数值汇总必须包含小数点,还可以使用科学计数法表示

在数值类型中存在一个特殊类型NaN,表示这不是数值,代表着原本要返回数值的操作失败了。(不是抛出错误)

1.2 Undefinde

Undefinde类型只有一个值,就是特殊值Undefinde。当我们使用var 、let声明变量但是没有初始化的时候就相当于给变量赋予了Undefinde值。

 

1.3 Sring

字符串可以用 双引号""    单引号  ''   反引号  `` 标识

字符串是不可变的,代表一旦创建值就不能改变

1.4 null

只有一个值 特殊值:null 表示一个空对象指针,这也是 type of 传给一个null时会返回object的原因

undefined的值是由null派生来的

只要变量要保存对象而当时又没有那个对象可保存,就可以用null来填充该变量

1.5 Boolean

布尔值:true 、false

可以把其他类型转换成布尔值,转换规则如下:
 

数据类型转换成true的值转换成false的值
String非空字符串“”
Number非0数值(包括无穷)0、NaN
Object任意对象null
UndefinedN/A(不存在)undefined

字符串 (String)

  • 非空字符串转换为 true

  • 空字符串 ("") 转换为 false

console.log(Boolean("hello")); // true
console.log(Boolean("0"));     // true
console.log(Boolean(""));      // false

数值 (Number)

  • 非 0 数值(包括无穷)转换为 true

  • 0NaN 转换为 false

console.log(Boolean(42));        // true
console.log(Boolean(-10));       // true
console.log(Boolean(Infinity));  // true
console.log(Boolean(NaN));       // false
console.log(Boolean(0));         // false

对象 (Object)

  • 任意对象转换为 true

  • null 转换为 false

console.log(Boolean({}));        // true
console.log(Boolean([]));        // true
console.log(Boolean(null));      // false

undefined

  • undefined 转换为 false

console.log(Boolean(undefined)); // false

1.6 Symbol

Symbol (符号)是原始值,实例是唯一的不可变的,主要用途是确保对象属性使用唯一标识符,避免发生属性冲突。

2:引用类型

复杂类型统称为Object,主要讨论以下三种:

Object
Array
Function

2.1   Object

创建object常用方式 是为对象字面量表示法,属性名可以是字符串或者数值

let person = {name: "nic","age": 29,5: true
};console.log(person.name);  // 输出: nic
console.log(person.age);   // 输出: 29
console.log(person[5]);    // 输出: true

总结

这个Object对象 person 有三个属性:

  1. name 属性:值为字符串 "nic"

  2. age 属性:值为数字 29

  3. 5 属性:值为布尔值 true

2.2 Array

JavaScript数组是一组有序的数据,和其他语言不同的是数组每个槽位都可以存储任意类型的数据,并且数组也是动态大小,会随着数据添加字段增长。

2.3  Function

函数实际上是对象,每个函数都是Function类型的实例,Function也有自己的属性和方法,和其他引用类型一样

函数存在三种常见的表达方式:
函数的声明:

函数表达式:

箭头函数:

注:除了上述三种其实还包括:Date、RegExp、Map、Set......

2.4 存储区别

基本数据类型存储在栈中,引用类型的对象存储于堆中

2.4.1 基本类型的赋值过程

初始栈内存

a10

a赋值给b

a10
b10

栈内存b保存了另一个值

a10
b20
2.4.2 引用类型的赋值过程

初始堆内存

obj1引用地址1

a复制地址给b

obj1引用地址1
obj2引用地址1

堆内存b保存了另一个值

obj1引用地址1
obj2引用地址1添加了name属性

由于地址是一样的二者共用的,所以改变2 的名称1也会有name属性。

二、说说对于js数据结构的了解

1:什么是数据结构?

数据结构是计算机存储、组织数据的方式。

数据结构意味着接口或是封装

常见的数据结构有:
 

数组        Array
栈        Stack   
队列        Queue
链表        Linked List
字典
散列表        Hash table
树        Tree
图        Graph
堆        Heap

2.数组

数组是使用一块连续的内存框架保存数据,保存的数据个数在分配内存的时候就是确定的。

3.栈

遵循后进先出原则的有序集合

在栈中新元素接近栈顶,旧元素接近栈底

加入和拿出元素都是在顶部操作(类似和果汁的杯子,上面是新到出来的,喝的时候也是喝新的)


4.队列

遵循先进先出(就像排队结账先来的先服务)
从队尾添加新元素在顶部移除元素,新元素必须在队尾

5.链表

为什么有了数组还要设计链表呢?因为在js里面数组被实现成了对象,效率很低如果数组效率很低就可以考虑换成链表来代替他

替换的条件:
链表集合可以用在任意可以使用的一维数组的情况中

如果需要随机访问,数组是更好的选择

6.字典

字典是键值对存储数据的数据结构,js的object就是以字典的形式设计的。

7.散列表

也称为哈希表,特点是插入、删除、取用都非常快。数组和链表想要找到一个数据都需要从头遍历,而散列表可以基于数组进行设计,数组长度是预先设定的,所有元素和该元素对应的键,保存在数组的特点位置,这里键和对象的键是类型的概念。

使用散列表存储数组时通过一个散列函数将键映射为一个数字,范围是0-列表长度(即使是高效的散列表也会存在两个键值映射为一个值的可能--碰撞,避免方法有:开链法、线性探测法)

使用条件:数据的插入、删除、取用 不适合查找数据


http://www.ppmy.cn/ops/160364.html

相关文章

[数据结构]顺序表详解

目录 一.线性表 二.顺序表 2.1概念及结构 1. 静态顺序表:使用定长数组存储元素。 2. 动态顺序表:使用动态开辟的数组存储。 2.1按需申请 2.2 接口实现:增删查改 SeqList.h: SeqList.c: test.c 一.线性表 线性表 ( line…

DeepSeek-R1使用生存指南

文章目录 1.为什么普通人一定要使用DeepSeek2.DeepSeek的几种使用方式2.1网页端直接使用2.2手机端app使用2.3其他第三方平台 3.网页端按钮的说明4.正确的提问技巧4.1不要定义过程4.2明确受众4.3记忆时间有限4.4输出长度限制4.5如何清除上下文的记忆 5.几个避坑点5.1冗长提示词污…

国产编辑器EverEdit - 独门暗器:自动监视剪贴板内容

1 监视剪贴板 1.1 应用场景 如果需要对剪贴板的所有历史进行记录,并进行分析和回顾,则可以使用监视剪贴板功能,不仅在EverEdit中的复制会记录,在其他应用的复制也会记录。 1.2 使用方法 新建一个空文档(重要:防止扰乱…

Ubuntu22 server 安装 Chrome浏览器

前言 在 Ubuntu 22 上安装 Google Chrome 浏览器通常会遇到一些问题,尤其是在没有图形界面的服务器版本上。本文将详细介绍如何通过命令行使用 apt 安装 Google Chrome,并解决 GPG 公钥错误等常见问题。 目录 前言1. 安装前的准备2. 导入 Google 的 GPG…

利用Java爬虫精准获取商品销量详情:实战案例指南

在电商领域,商品销量数据是衡量产品受欢迎程度和市场表现的关键指标。精准获取商品销量详情不仅能帮助商家优化产品策略,还能为市场研究和数据分析提供丰富的数据资源。本文将详细介绍如何利用Java爬虫技术精准获取商品销量详情,并分享关键技…

Unity面板介绍_层级面板(23.1.1)

一、Inspector(检视面板) 显示当前选定游戏对象附加的组件及其属性信息。为重要游戏物体选择图标 二、面板详情

DeepSeek 新注意力架构NSA

DeepSeek 新注意力架构NSA概要 研究背景: 实现高效长上下文建模的自然方法是利用 softmax 注意力的固有稀疏性,通过选择性计算关键 query-key 对,可以显著减少计算开销,同时保持性能。最近这一路线的进展包括多种策略&#xff1…

前端笔试面试资源汇总

好的,我现在需要帮助用户找到热门实用的前端笔试面试贴。首先,回顾之前的对话,用户已经询问了常见的前端算法题目,现在他们想要更广泛的资源,可能包括面试题、面经、学习资料等。用户可能正在准备前端面试,…