2024前端面试题-js篇

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.rhkb.cn/news/408704.html

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

相关文章

多动症的孩子有哪些症状表现?

在星启帆自闭症儿童康复机构,我们不仅关注自闭症儿童的成长与康复,也深刻认识到多动症对儿童日常生活、学习和社交的深远影响。多动症,全称注意缺陷多动障碍,是一种常见于儿童时期的神经发育性疾病,其症状表现多种多样…

Python酷库之旅-第三方库Pandas(097)

目录 一、用法精讲 416、pandas.DataFrame.memory_usage方法 416-1、语法 416-2、参数 416-3、功能 416-4、返回值 416-5、说明 416-6、用法 416-6-1、数据准备 416-6-2、代码示例 416-6-3、结果输出 417、pandas.DataFrame.empty属性 417-1、语法 417-2、参数 …

FTP协议-匿名用户登录 从0到1

前言 日常大家可能接触web漏洞比较多而对其他端口及协议不那么了解,其实其他协议漏洞在渗透中也同样重要只是平时可能接触得不多。本文将介绍FTP协议、FTP匿名用户登录及其具体流程分析和自动化利用demo。 FTP简介 FTP是File Transfer Protocol(文件传…

google浏览器chrome用户数据(拓展程序,书签等)丢失问题

一、问题背景 我出现这个情况的问题背景是:因为C盘块满了想清理一部分空间(具体看这:windows -- C盘清理_c盘softwaredistribution-CSDN博客),于是找到了更改AppDatta这个方法,但因为,当时做迁移…

opencv-python图像增强十五:高级滤镜实现

文章目录 前言二、鲜食滤镜三、巧克力滤镜三,冷艳滤镜: 前言 在之前两个滤镜文章中介绍了六种简单的滤镜实现,它们大多都是由一个单独函数实现的接下来介绍五种结合了之前图像增强文章提的的算法的复合滤镜。本案例中的算法来自于文章一&…

qt-PLC可视化编辑器

qt-PLC可视化编辑器 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "diagramitem.h" #include "arrow.h"#include <QDebug> #include <QGraphicsScene> #include <QGraphicsSceneContextMenuEvent> #includ…

[000-01-018].第3节:Linux环境下ElasticSearch环境搭建

我的后端学习笔记大纲 我的ElasticSearch学习大纲 1.Linux系统搭建ES环境&#xff1a; 1.1.单机版&#xff1a; a.安装ES-7.8版本 1.下载ES: 2.上传与解压&#xff1a;将下载的tar包上传到服务器software目录下&#xff0c;然后解压缩&#xff1a;tar -zxvf elasticsearch-7…

人工智能算法工程师(中级)课程21-深度学习中各种优化器算法的应用与实践、代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程21-深度学习中各种优化器算法的应用与实践、代码详解。本文将介绍PyTorch框架下的几种优化器&#xff0c;展示如何使用PyTorch中的优化器&#xff0c;我们将使用MNIST数据集和一个简单…

增材制造(3D打印):为何备受制造业瞩目?

在科技浪潮的推动下&#xff0c;增材制造——即3D打印技术&#xff0c;正逐步成为制造业领域的璀璨新星&#xff0c;吸引了航空航天、汽车、家电、电子等众多行业的目光。那么&#xff0c;是什么让3D打印技术如此引人注目并广泛应用于制造领域&#xff1f;其背后的核心优势又是…

Unity-可分组折叠的Editor

Unity-可分组折叠的Editor &#x1f957;功能介绍&#x1f36d;用法 &#x1f957;功能介绍 在序列化的字段上标记特性:[FoldoutGroup(“xxx”)]&#xff0c;inspector上就会被分组折叠显示。 &#xff08;没有被指定的字段自动放到Default组中&#xff09; 传送门&#x1f30…

【Python】1.基础语法(1)

文章目录 1.变量的语法1.1定义变量1.1.1硬性规则(务必遵守)1.1.2软性规则&#xff08;建议遵守&#xff09; 1.2使用变量 2.变量的类型2.1整型2.2浮点型2.3 字符串类型2.4布尔类型2.5其他类型2.6 动态类型特性 3.注释3.1 注释行3.2 文档字符串 3.3 如何批量注释3.4注释的规范 4…

深信服上半年亏损5.92亿,营收同比降低2.3亿

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

如何使用ssm实现网络安全宣传网站设计

TOC ssm177网络安全宣传网站设计jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管…

【SQL】指定日期的产品价格

目录 题目 分析 代码 题目 产品数据表: Products ------------------------ | Column Name | Type | ------------------------ | product_id | int | | new_price | int | | change_date | date | ------------------------ (product_id, chang…

九、前端中的异步方法Promise,Promise详解

文章目录 1.Promise简介什么是promise为什么使用Promisepromise中的状态 2.Promis的用法 1.Promise简介 什么是promise Promise是异步编程的一种解决方案&#xff0c;它的构造函数是同步执行的&#xff0c;then 方法是异步执行的。 为什么使用Promise 在JavaScript的世界中…

Java 入门指南:List 接口

Collection 接口提供了一系列用于操作和管理集合的方法&#xff0c;包括添加、删除、查询、遍历等。它是所有集合类的根接口&#xff0c;包括 List、Set、Queue 等。 Collection 接口常见方法 add(E element)&#xff1a;向集合中添加元素。 addAll(Collection col)&#xff1…

洛谷 P2569 [SCOI2010] 股票交易

题目来源于&#xff1a;洛谷 题目本质&#xff1a;动态规划&#xff0c;单调队列 解题思路&#xff1a; 方程f[i][j]表示第 i 天结束后&#xff0c;手里剩下 j 股的最大利润&#xff0c;则不买不卖&#xff1a;f[i][j]f[i-1][j]。 买入&#xff1a;f[i][j]max{f[i-w-1][k]k*…

vue3+ts+Go使用百度地图路书实现历史轨迹回放、轨迹回放进度、聚合点、自定义弹框和实时监控视频、多路视频轮巡播放

前言 分享一个刚做完项目集成技术&#xff0c;一个车辆行驶轨迹监控、行车视频监控、对特种车辆安全监管平台&#xff0c;今年政府单位有很多监管平台项目&#xff0c;例如&#xff1a;渣土车监控、租出车监管、危害气体运输车监管等平台&#xff0c;这些平台都有车辆行驶轨迹…

uniapp实现区域滚动、下拉刷新、上滑滚动加载更多

背景&#xff1a; 在uniapp框架中&#xff0c;有两种实现办法。第1种&#xff0c;是首先在page.json中配置页面&#xff0c;然后使用页面的生命周期函数&#xff1b;第2种&#xff0c;使用<scroll-view>组件&#xff0c;然后配置组件的相关参数&#xff0c;包括但不限于&…

Spring(一篇就懂)

Spring框架简介 Spring 是一个开源的Java企业级应用开发框架。 特点&#xff1a; 控制反转&#xff08;IoC&#xff09;&#xff1a;通过依赖注入&#xff08;DI&#xff09;减少组件间的耦合&#xff0c;由Spring容器负责对象的创建和绑定。 面向切面编程&#xff08;AOP&am…