前端开发面试题总结-JavaScript篇(二)

文章目录

  • 其他高频问题
    • 15、JS的数据类型有哪些
    • 16、如何判断数组类型?
    • 17、解释 this 的指向规则
    • 18、跨域问题及解决方案
    • 19、宏任务与微任务的区别是什么?列举常见的宏任务和微任务。
    • 20、为什么微任务的优先级高于宏任务?设计目的是什么?
    • 21、什么是“严格模式”(Strict Mode)?它解决了哪些问题?
    • 22、ES6模块化和Commonjs模块化的区别
    • 23、本地存储和cookie的区别
    • 24、什么是事件代理(事件委托)
    • 25、什么是事件流
    • 26、如何检测浏览器的类型
    • 27、对象的方法和字符串方法(常用)
    • 28、什么是深拷贝和浅拷贝
    • 29、call、apply和bind的区别
    • 30、38--es6有哪些新特性?

其他高频问题

15、JS的数据类型有哪些

JavaScript的数据类型分为: 简单数据类型 和 引用数据类型。
简单数据类型包括: Number、String、Boolean、Undefined、Null 和 Symbol;
引用数据类型包括: Object,包括数组、函数等。此外,ES2020新增了 BigInt 用于大整数。

16、如何判断数组类型?

● Array.isArray(arr)
● Object.prototype.toString.call(arr) === '[object Array]'
● arr instanceof Array(不推荐,可能受跨窗口影响)。

17、解释 this 的指向规则

● 默认绑定:全局对象(严格模式为 undefined)。
● 隐式绑定:调用时的对象(如 obj.fn())。
● 显式绑定:call/apply/bind 指定 this。
● new 绑定:指向新创建的对象。

18、跨域问题及解决方案

答案:
● 同源策略:协议、域名、端口一致。
● 解决方案:
a. CORS(服务器设置 Access-Control-Allow-Origin)。
b. JSONP(通过 

19、宏任务与微任务的区别是什么?列举常见的宏任务和微任务。

区别:
○ 宏任务:由浏览器/Node.js 发起的任务,执行优先级低于微任务。每次事件循环中只执行一个宏任务。
○ 微任务:在当前宏任务执行结束后、下一个宏任务开始前立即执行,优先级更高。
● 常见类型:
○ 宏任务:setTimeout、setInterval、DOM 事件回调、I/O 操作(Node.js)、requestAnimationFrame(浏览器)、setImmediate(Node.js)。
○ 微任务:Promise.then、Promise.catch、Promise.finally、MutationObserver(浏览器)、process.nextTick(Node.js,优先级最高)。

20、为什么微任务的优先级高于宏任务?设计目的是什么?

微任务的设计是为了在当前任务执行完成后、渲染前处理高优先级的异步操作(如 Promise 回调),确保这些操作能快速响应,避免阻塞 UI 更新。例如:
● 在数据更新后立即处理 DOM 变更(如 Vue/React 的异步更新机制)。
● 确保多个 Promise.then 回调连续执行,避免被其他任务插队。

21、什么是“严格模式”(Strict Mode)?它解决了哪些问题?

● 启用方式:在脚本或函数顶部添加 "use strict";。
● 主要限制:
○ 禁止未声明变量赋值(抛出 ReferenceError)。
○ 禁止删除不可删除属性(如 delete Object.prototype)。
○ 函数参数不能重名。
○ eval 和 arguments 不能作为变量名。
○ this 默认不指向全局对象(未绑定时为 undefined)。

22、ES6模块化和Commonjs模块化的区别

● 语法:
○ ES6:使用 import 和 export。
○ CommonJS:使用 require 和 module.exports。
● 加载方式
○ ES6:静态加载(编译时确定依赖)。
○ CommonJS:动态加载(运行时加载)。
● 模块输出
○ ES6:输出值的引用,模块内部变化会反映到外部。
○ CommonJS:输出值的拷贝,模块内部变化不会影响外部。
● 应用场景
○ ES6:适合浏览器和现代开发环境(如Webpack、Babel)。
○ CommonJS:主要用于Node.js。
● 兼容性
○ ES6:现代浏览器和Node.js 12.x以上支持,旧环境需转译。
○ CommonJS:Node.js原生支持,浏览器需打包工具。
● 总结
○ ES6模块化:静态加载、输出引用,适合现代开发。
○ CommonJS:动态加载、输出拷贝,适合Node.js。

23、本地存储和cookie的区别

  1. 是什么: 都是用来存储数据的方式
  2. 区别:
    2.1. 请求不同:
  • cookie 向服务器请求数据会携带
  • sessionStorage和localStorage 仅在本地保存
    2.2. 存储大小限制也不同:
  • cookie 数据不能超过 4k
  • sessionStorage和localStorage约 5M
    2.3. 数据有效期不同:
  • sessionStorage:仅在当前浏览器窗口关闭前有效
  • localStorage:始终有效,持久数据,除非手动删除
  • cookie的有效期是可以设置的,默认的情况下是关闭浏览器后失效

24、什么是事件代理(事件委托)

  1. 是什么
    ● 事件代理(事件委托),是JavaScript中绑定事件的常用技巧。把原本需要绑定的事件委托给父元素,让父元素负责事件监听。事件代理的原理是DOM元素的事件冒泡
  2. 事件委托的好处:
    ● 减少事件数量,提高性能
  3. 使用场景:
    ● 动态创建的元素
    ●大量的子元素需要注册事件

25、什么是事件流

  1. 是什么
    ● 事件流流动的路径。也就是说,当一个事件发生时,这个事件的传播过程就是事件流。
  2. 事件包含阶段
    ●事件流一般包含三个阶段:捕获 目标 冒泡

26、如何检测浏览器的类型

可以通过 navigator.userAgent 来检测浏览器的信息

27、对象的方法和字符串方法(常用)

  1. 对象
    ● Object.keys() 获取对象中的属性, 返回数组
    ● Object.values() 获取对象中的属性值, 返回数组
    ● Object.assign() 对象浅拷贝
  2. 字符串
    ● length属性 获取字符串的长度
    ● charAt() 从一个字符串中返回指定的字符
    ● substring 方法返回一个字符串在开始索引到结束索引之间的一个子集
    ● split() 字符串转数组, 返回数组
    ● includes() 字符串是否包含某个元素, 返回布尔值

28、什么是深拷贝和浅拷贝

1.浅拷贝: 拷贝对象的一层属性,如果对象里面还有对象,拷贝的是地址, 两者之间修改会有影响,适用于对象里面属性的值是简单数据类型的.
2.深拷贝: 拷贝对象的多层属性,如果对象里面还有对象,会继续拷贝,使用递归去实现

29、call、apply和bind的区别

  1. 是什么
    ● 用来改变this指向的方法
  2. 特点
    2.1. call/apply/bind 第一个参数修改this的指向
    2.2. call 可以调用函数, 第二个参数,实参列表, 参数之间用逗号隔开
    2.3. apply 可以调用函数, 第二个参数,是个数组或伪数组

30、38–es6有哪些新特性?

ES6 核心新特性:

  1. 变量声明
    ○ let/const:块级作用域,解决变量提升问题,const 声明常量。
  2. 箭头函数
    ○ () => {}:简化函数语法,无自身 this,继承外层上下文,不可作为构造函数。
  3. 模板字符串
    ○ 反引号 ` 包裹,支持换行和变量插值(${value})。
  4. 解构赋值
    ○ 从数组/对象中提取值赋值给变量,简化数据访问(如 const { a, b } = obj)。
  5. 函数参数默认值
    ○ 允许函数参数设置默认值(function(a = 1) {})。
  6. 扩展运算符
    ○ … :展开数组/对象(合并数组、浅拷贝对象等)。
  7. Promise
    ○ 异步编程解决方案,替代回调地狱,支持链式调用(.then()/.catch())。
  8. 模块化
    ○ import/export 实现代码模块化,取代传统脚本依赖管理。
  9. 类(Class)
    ○ 语法糖,基于原型链的面向对象编程(class/extends/super)。
  10. Set/Map 数据结构
    ○ Set 存储唯一值,Map 支持任意类型的键值对。
  11. Symbol
    ○ 唯一且不可变的数据类型,用于对象属性的唯一标识。
  12. 生成器(Generator)
    ○ function* 定义,yield 暂停执行,实现惰性求值或异步流程控制。
  13. Proxy/Reflect
    ○ 代理对象操作(拦截读取、赋值等),Reflect 提供对象操作的标准方法。
    核心价值:
    ● 提升代码简洁性、可读性与维护性
    ● 增强异步处理能力(Promise、async/await后续)
    ● 推动模块化与标准化开发模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件电路设计-开关电源设计

硬件电路设计-开关电源 电容选取设置输出电压电感的选取PCB布局典型电路 这里以杰华特的JW5359M 开关电源为例,介绍各个部分的功能电路。 当EN引脚电压低于0.4V时,整个稳压器关闭,稳压器消耗的电源电流降至1μΑ以下 电容选取 1.C1和C25构成…

phosphobot开源程序是控制您的 SO-100 和 SO-101 机器人并训练 VLA AI 机器人开源模型

​一、软件介绍 文末提供程序和源码下载 phosphobot开源程序是控制您的 SO-100 和 SO-101 机器人并训练 VLA AI 机器人开源模型。 二、Overview 概述 🕹️ Control your robot with the keyboard, a leader arm, a Meta Quest headset or via API 🕹️…

数据通信基础

信道特性 1.信道带宽W • 模拟信道:Wf2-f1(f2和f1分别表示:信道能通过的最高/最低频率,单位赫兹Hz)。 • 数字信道:数字信道是离散信道,带宽为信道能够达到的最大数据传输速率,单位…

C++与Python编程体验的多维对比:从语法哲学到工程实践

引言:语言定位的本质差异 作为静态编译型语言的代表,C以0开销抽象原则著称,其模板元编程能力可达图灵完备级别,而Python作为动态解释型语言,凭借鸭子类型和丰富的标准库成为快速开发的首选。这种根本差异导致两种语言…

TP6 实现一个字段对数组中的多个值进行LIKE模糊查询(OR逻辑)

在ThinkPHP6中,可以通过以下方式实现一个字段对数组中的多个值进行LIKE模糊查询(OR逻辑): 1,使用数组形式的where条件,通过第三个参数指定逻辑关系: $where[] [字段名, like, [%值1%, %值2%]…

接口不是json的内容能用Jsonpath获取吗,如果不能,我们选用什么方法处理呢?

JsonPath 是一种专门用于查询和提取 JSON 数据的查询语言(类似 XPath 用于 XML)。以下是详细解答: ​JsonPath 的应用场景​ ​API 响应处理​:从 REST API 返回的 JSON 数据中提取特定字段。​配置文件解析​:读取 J…

TCP/IP 与高速网络

题目用 “与” 而不是 “是” 连接两名词,说明它们天然互斥,就比如看到 “经理与人” ,自然而然的就会觉得经理接近了神。 数据在 TCP/IP 网络上传输获得的 “尽力而为” 承诺的时间在端到端时延中占比太大,以至于针对 TCP/IP 的…

Vue3 (数组push数据报错) 解决Cannot read property ‘push‘ of null报错问题

解决Cannot read property ‘push‘ of null报错问题 错误写法 定义变量 <script setup>const workList ref([{name:,value:}])</script>正确定义变量 <script setup>const workList ref([]) </script>解决咯~

React前端框架

React&#xff1a;构建现代用户界面的范式革命&#xff08;深度解析&#xff09; 引言&#xff1a;前端开发的范式转变 在2013年之前&#xff0c;前端开发领域被jQuery等库主导&#xff0c;开发者通过命令式编程直接操作DOM元素。这种模式存在两大痛点&#xff1a;代码可维护…

Redis:string数据类型

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Redis &#x1f525; String字符串 &#x1f9d1;‍&#x1f4bb; 字符串类型是Redis最基础的数据类型&#xff0c;关于字符串需要特别注意&#xff1a; ⾸先Redis中所有的键的类型都是字符串类…

获取 OpenAI API Key

你可以按照以下步骤来获取 openai.api_key&#xff0c;用于调用 OpenAI 的 GPT-4、DALLE、Whisper 等 API 服务&#xff1a; &#x1f9ed; 获取 OpenAI API Key 的步骤&#xff1a; ✅ 1. 注册或登录 OpenAI 账号 打开 https://platform.openai.com/ 使用你的邮箱或 Google/…

window安装docker\docker-compose

安装前配置 打开控制面板,参照下图打开“启动或关闭windows功能”,Hyper-V 和容器需要启用 程序和功能 启动或关闭windows功能 勾选Hyper-V 安装路径配置 Docker在Windows上的默认安装路径为C:\Program Files\Docker。 以管理员身份运行CMD在D盘,dev文件夹下创建Docker文…

Xxl-job——源码设计思考

摘要 本文深入探讨了XXL-Job框架的设计思考&#xff0c;分析了其不使用Lombok的Data注解的原因&#xff0c;包括明确控制代码结构、避免依赖侵入、增强可维护性和调试便利性、保持编译清晰以及遵循项目历史和团队编码规范。文章还详细介绍了XXL-Job的优化设计&#xff0c;包括…

九、【ESP32开发全栈指南: UDP通信服务端】

一、TCP与UDP核心差异 特性TCPUDP连接方式面向连接 (需三次握手)无连接可靠性可靠传输 (重传/排序/校验)尽力交付 (不保证可靠性)实时性延迟较高低延迟&#xff0c;实时性强传输效率协议开销大头部开销小 (仅8字节)连接类型点对点支持广播/多播资源占用高 (需维护连接状态)极低…

`mermaid-cli` 生成高分辨率 Mermaid 流程图(可以下载安装Typora更好 )的操作指南

以下是使用 mermaid-cli 生成高分辨率 Mermaid 流程图&#xff08;可以下载安装Typora更好 &#xff09;的操作指南 一、安装依赖&#xff08;需管理员权限&#xff09; 安装 Node.js v16 官网下载&#xff1a;Node.js 官方下载 验证安装成功&#xff1a; node -v # 应显…

LlamaFactory × 多模态RAG × Chat-BI:万字长文探寻RAG进化轨迹,打造卓越专业AI助手

你有没有想过&#xff0c;大模型如何更聪明地回答问题&#xff1f;&#x1f914; 当传统 RAG 遇上多模态与商业智能&#xff08;BI&#xff09;&#xff0c;会碰撞出怎样的火花&#xff1f;&#x1f914; 今天我们将围绕医学这个专业领域&#xff0c;一步步搭建出一个集众多本…

python打卡day47

特征图与注意力热图 知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图通道注意力后的特征图和热力图 特征图本质就是不同的卷积核的输出&#xff0c;浅层指的是离输入图近的卷积层&#xff0c;浅层卷积层的特征图通常较大&#xff0c;而深层特征图会经…

缓存一致性 与 执行流

上接多执行流系统中的可见性 在缓存一致性协议描述中&#xff0c;使用“处理器”或“CPU核心”比“执行流”更精确吗? 核心结论&#xff1a;在缓存一致性协议描述中&#xff0c;使用“处理器”或“CPU核心”比“执行流”更精确&#xff01; 你的直觉是正确的。 原因分析&am…

机器学习:load_predict_project

本文目录&#xff1a; 一、project目录二、utils里的两个工具包&#xff08;一&#xff09;common.py&#xff08;二&#xff09;log.py 三、src文件夹代码&#xff08;一&#xff09;模型训练&#xff08;train.py&#xff09;&#xff08;二&#xff09;模型预测&#xff08;…

Qt Test功能及架构

Qt Test 是 Qt 框架中的单元测试模块&#xff0c;在 Qt 6.0 中提供了全面的测试功能。 一、主要功能 核心功能 1. 单元测试框架 提供完整的单元测试基础设施 支持测试用例、测试套件的组织和执行 包含断言宏和测试结果收集 2. 测试类型支持 单元测试&#xff1a;对单个函…