2024前端面试题-js篇

news/2024/9/18 15:13:48/ 标签: 前端, javascript, 面试

1.js有哪些数据类型

基础数据类型:string,number,boolean,null,undefined,bigInt,symbol

引用数据类型:Object

2.js检测数据类型的方式

  • typeof:其中数组、对象、null都会被判断为object,其他判断都正确
  • instanceof:只能正确判断引用数据类型,而不能判断基本数据类型。instanceof 运算符可以用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
  • constructor:console.log((2).constructor === Number); // true      constructor有两个作用,一是判断数据的类型,二是对象实例通过 constrcutor 对象访问它的构造函数。需要注意,如果创建一个对象来改变它的原型,constructor就不能用来判断数据类型了
  • Object.prototype.toString.call(),使用 Object 对象的原型方法 toString 来判断数据类型

3.如何判断是否为数组

  • Object.prototype.toString.call()
  • 通过原型链做判断,obj.__proto__ === Array.prototype
  • 通过ES6的Array.isArray()方法
  • instanceof做判断,obj instanceof Array
  • Array.prototype.isPrototypeOf(obj)

4.原型和原型链

  • 首先prototype是原型,_proto_是原型链。
  • 每个构造函数都有一个prototype原型对象,prototype原型对象里的constructor指向构造函数。
  • 构造函数new出的对象通过_proto_指向prototype原型对象,在prototype中的多个prototype一层一层查找看有没有目标元素,就是原型链。
  • 原型链的顶点是Object.prototype。

5.call apply bind区别

  • call第一个参数是对象,后面可以接受若干个参数
  • apply第一个参数是对象,后面是用数组提供参数
  • call apply直接调用,bind会创建一个新函数,将第一个参数作为它运行时的this

6.new操作符具体干了什么

  • 创建一个新的空对象
  • 将这个新对象的原型指向构造函数的原型
  • 将构造函数的this指向这个新对象
  • 执行构造函数代码,初始化新对象
  • 返回新对象

7.节流防抖

节流:函数执行一次后,在规定的时间内不再执行

防抖:在规定的时间内没有触发事件,就执行函数,如果在规定的时间触发了时间久重新开始计时

8.promise有哪些方法

  • promise.all是等待所有异步方法执行完成后再继续后面的操作。
  • promise.race是哪一个方法最先执行结束就返回哪个方法的执行结果。
  • promise.allSettled是无论请求对错最终都会返回一个数组对象 到 .then 中,并切返回的数据中标识了错误跟正确数据 。
  • promise.finally是不管成功或者失败都会执行回调函数。
  • promise.any是返回第一个成功的值,如果全部都被拒绝了,就返回第一个拒绝的。

9.哪些操作会造成内存泄漏

  • 闭包
  • 意外的全局变量
  • 没有清理的dom元素引用
  • 被遗忘的定时器或者回调

10.js请求会有哪些缓存

  • dns缓存
  • cdn缓存
  • 浏览器缓存
  • 服务器缓存

11.为什么0.1+0.2不等于0.3

12.如何跳出forEach循环

forEach 是数组的一种迭代方法,主要用于对数组中的每一项执行给定的函数。它只是简单地对数组进行遍历,没有提供跳出循环的机制。

  • 使用 every 或 some方法遍历。every 方法测试数组中的每一元素是否都满足所提供的测试函数。如果有任一元素不满足条件,则整个方法返回 false 并且立即终止进一步的遍历。some 方法与 every 相反,它检查数组中是否至少有一个元素满足测试函数。如果找到了一个满足条件的元素,则方法返回 true 并且停止遍历。
  • 通过抛出异常退出。当异常被抛出时,正常的流程被打断,可以通过 catch 块捕获异常,从而实现停止迭代的效果。

  • 除了 every 和 some,还可以使用传统的 for 循环或 for...of 循环替代 forEach,这样就可以使用 break 来退出循环。

13.事件循环机制

可参考:https://article.juejin.cn/post/7231986666511237175

执行顺序:同步代码->微任务->宏任务

题目:

Promise.resolve().then(() => {console.log(0);return Promise.resolve(4);}).then((res) => {console.log(res);});
Promise.resolve().then(() => {console.log(1);}).then(() => {console.log(2);}).then(() => {console.log(3);}).then(() => {console.log(5);}).then(() => {console.log(6);});

结果:0123456

14.箭头函数与普通函数有什么区别

  • 箭头函数比普通函数更加简洁
  • 箭头函数没有自己的this
  • 箭头函数继承来的this指向永远不会改变,指向最近的外层作用域中的this所指对象
  • call()、apply()、bind()等方法不能改变箭头函数中this的指向
  • 箭头函数不能作为构造函数使用

15.ES6有哪些新特性

  • 箭头函数
  • 解构赋值
  • 模板字符串
  • promise
  • symbol Symbol是ES6中引入的一种新的基本数据类型,用于表示一个独一无二的值,不能与其他数据类型进行运算
  • 新的变量声明方式-let和const
  • 模块化-es6新增了模块化,根据功能封装模块,通过import导入,然后通过export导出也可以使用export default导出
  • for…of 循环,用于遍历可迭代对象(如数组、Map 和 Set)中的元素
  • 扩展运算符:使用 ... 可以将数组或对象展开成多个参数,或者将多个参数合并成一个数组
  • 展开运算符:在ES6中用...来表示展开运算符,它可以将数组或者对象进行展开
  • Map 和 Set,引入了两种新的数据结构,分别用于存储键值对和唯一值
  • Proxy,允许在对象和函数调用等操作前后添加自定义的行为
  • 类(Class),引入了面向对象编程中类的概念

16.说说你对闭包的理解

  • 是什么 当一个函数中的内部函数被拿到函数外部调用,又因为在js中内层作用域总是能访问外层作用域的,那么内部函数存在对外部函数中变量的引用,这些变量的集合称之为闭包
  • 使用场景:
  1. 创建私有变量 (全局变量不易维护)
  2. 延长变量的生命周期
  3. 实现柯里化
  • 缺点:会造成内存泄漏

17.如何判断两个对象是否相等

  • JSON.stringify()将对象 转化为字符串使用 ===操作符进行比较
  • 使用遍历递归进行比较
  • 使用 Lodash 的 isEqual 方法
  • 使用 Object.is() 方法,console.log(Object.is(obj1, obj2));  //true

18.数组去重

  • 使用filter()方法
    const arr = [1, 2, 3, 4, 2, 3, 5];
    const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);
    console.log(uniqueArr); // [1, 2, 3, 4, 5]
  • 使用reduce()和include()方法 
    const arr = [1, 2, 3, 4, 2, 3, 5];
    const uniqueArr = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
    console.log(uniqueArr); // [1, 2, 3, 4, 5]
  • Set方法,...new Set(arr)

19.import与require区别

  • import(es6)编译时加载
  • require(commonjs)运行时加载

http://www.ppmy.cn/news/1517201.html

相关文章

Jupyter 的可视化 Debug

Jupyter 这种工具虽然有很好的交互性能,但其也明白,对于大型代码库,最好还是用传统的 IDE 比较靠谱。 因此为了弥补这一缺陷,Jupyter 项目在过去几年也希望通过 JupyterLab 来加强对大型代码库的处理过程。 然而,Jup…

vue中实现图片裁剪

在现代Web应用中&#xff0c;图片处理是一个常见的需求。本文将介绍如何使用Vue.js结合Cropper.js实现一个简单的图片裁剪功能。以下是实现该功能的完整代码。 代码实现 <template><div class"c-copper-container" :class"{wd260 : type articlesub…

零知识证明-非对称加解密算法(三)

前言 非对称加解密算法 &#xff0c;就有对称加解密算法 1:对称算法 定义 对称算法&#xff0c;加解密双方使用一个密钥。即加密秘钥和解密秘钥相同。 对称加密又分为&#xff1a;分组加密和流加密 分组加密 分组加密是每次只能处理特定长度的一块数据的一类密码算法&#xff0…

WPF 手撸插件 五 消息总线

虽然暂时不知道该如何将消息总线集成到插件系统中&#xff0c;但是让我先学习起来吧&#xff0c;本文主要来说说我最近学习的Reface.EventBus Reface.EventBus有两个版本&#xff0c;分别支持.Net Framework和 .Net Core。 我们这里先说支持.Net Framework的版本&#xff0c;先…

【问题记录】mysql报错 ,mysql2 和 mysql 5.

错误2 和 错误5 都是由于注册表有问题&#xff1a; 由于我之前安装过MySQL&#xff0c;导致之前的配置没有删除。 解决&#xff1a; 搜索打开注册表编辑器&#xff1a; 注册表中找到MySQL: 修改路径&#xff1a; "D:\develop\mysql-8.0.39-winx64\bin\mysqld&quo…

边缘物联网平台AIoTedge推荐

AIoTedge是一个创新的智能边缘计算平台&#xff0c;它通过边云协同的架构设计&#xff0c;实现了多点部署和分布式计算&#xff0c;提高了数据处理的速度和效率&#xff0c;同时确保了数据的安全性和隐私性。平台具备强大的分布式AIoT处理能力&#xff0c;适用于多种场景&#…

【中学教资-信息技术】图像/音频/视频文件大小的计算

图像/音频/视频文件大小的计算 1 图像文件2 音频文件3 视频文件4 例题5 总结 视频讲解&#xff1a;音频文件大小/视频文件大小计算-失舵之舟 1 图像文件 压缩比原始大小/被压缩之后大小 颜色深度&#xff1a;指图像中每个像素所占的二进制位数&#xff08;bit&#xff09; n位…

linux查看系统安装时间命令,找出Linux操作系统(OS)安装日期和时间

你可能想知道你的计算机上何时安装了Linux操作系统,即OS的安装日期和时间,使用tune2fs、dumpe2fs、ls、basesystem、setup、setuptool命令能出来结果。请注意,如果你从模板安装了操作系统,那么它将显示模板生成日期,而不是实际操作系统安装日期。 方法1:如何使用tune2fs…

Solidity入门——receive()和fallback()以及交易数据的简单介绍和运用

如何运用payable和transfer发送交易 在以太坊智能合约中&#xff0c;payable关键字和.transfer()方法它们在智能合约中是如何被使用的。 payable关键字 payable关键字用于声明合约或函数可以接受以太币。当你在一个函数或合约前面加上payable修饰符时&#xff0c;你允许该函…

java程序优化

Java程序的性能优化是一个复杂但非常重要的过程&#xff0c;它涉及多个方面。首先&#xff0c;我们需要识别性能瓶颈的具体位置&#xff0c;这通常可以通过性能分析工具&#xff08;如JProfiler, VisualVM等&#xff09;来完成。以下是一些通用的优化策略&#xff1a; 代码层面…

软件测试学习笔记丨Pytest配置文件

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/31774 一、Pytest配置文件 1.1 pytest.ini的定义 pytest.ini是pytest的配置文件&#xff1b;可以修改pytest的默认行为&#xff1b;不能使用任何中文符号&#xff0c;包括汉字、空格、引号、…

Kafka分布式集群部署实战:跨越理论,直击生产环境部署难题与解决方案,性能调优、监控与管理策略大揭秘,轻松上手分布式消息中间件

本文介绍kafka的集群如何部署和安装&#xff0c;1-4章理论知识&#xff0c;第5章详解集群的部署&#xff0c;部署Kafka之前需要先部署好分布式的Zookeeper&#xff0c;不喜欢理论的可以直接看第5章&#xff0c;欢迎大家一起探讨技术&#xff01; Zookeeper集群部署参考文章&…

JavaScript 数据结构 ==== 二叉树

目录 二叉树 结构 二叉树和二叉搜索树介绍 1.创建树 2.插入一个键 3.树的遍历 中序排序 先序遍历 后序遍历 4.搜索树中的值 5.删除节点 二叉树 在计算机科学中&#xff0c;二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”&#xff08;left subtre…

【数据结构】优先级队列 — 堆

文章目录 前言1. 优先级队列1.1 概念1.2 特性 2. 堆2.1 概念2.2 存储方式 3. 堆的模拟实现3.1 堆的创建3.2 堆的插入3.3 堆的删除 4. PriorityQueue4.1 注意事项4.2 构造器介绍4.3 常用方法介绍 5. 经典题型6. 结语 前言 我们之前学习过队列&#xff0c;它是遵循先进先出原则的…

全国教育大模型完成备案已达40个

全国教育大模型完成备案已达40个 近期&#xff0c;教育行业正迎来一场由人工智能引领的革新风暴&#xff0c;近日&#xff0c;职业培训机构粉笔上线了AI老师“粉笔头”&#xff0c;被称为首个职教行业的垂直大模型。据最新统计&#xff0c;截至今年6月&#xff0c;我国教育领域…

中资优配:国家推动大规模投资更新能源重点领域设备

8月21日&#xff0c;国家开展变革委、国家动力局联合印发《动力要点领域大规模设备更新施行方案》&#xff08;以下简称《方案》&#xff09;&#xff0c;清晰将要点推进施行煤电机组节能改造、供热改造和灵活性改造“三改联动”&#xff0c;输配电、风电、光伏、水电等领域完成…

mac Let‘s Encrypt 免费SSL证书申请

1、安装certbot brew install certbot 2、执行命令 sudo certbot certonly -d "iot.xxx.cn" --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory 3、域名解析配置 4、按Enter继续 5、生成证书 fullchain.pem 是证书文…

GPS北斗授时服务器(网络时钟系统)助力金融领域

GPS北斗授时服务器&#xff08;网络时钟系统&#xff09;助力金融领域 GPS北斗授时服务器&#xff08;网络时钟系统&#xff09;助力金融领域 摘 要:首先对计算机网络时间同步相关技术进行了介绍,然后阐述了时间同步技术在现代计算机网络中的应用与发展,最后指出时间同步网络在…

【奇某信-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

嵌入式机器视觉的流水线分拣机器人:OpenCV、 FreeRTOS、 TensorFlow(代码详解)

一、项目概述 在现代自动化生产中&#xff0c;分拣机器人作为提高生产效率和准确度的重要工具&#xff0c;正逐渐成为工业流水线的核心组成部分。本项目旨在设计一款基于嵌入式机器视觉的流水线分拣机器人&#xff0c;通过高效的图像处理与实时控制技术&#xff0c;实现对物品…