2024前端面试题-js篇

news2024/12/24 9:18:41

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.coloradmin.cn/o/2062017.html

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

相关文章

基于WebSocket打造的一款SSH客户端

引用:Java打造一款SSH客户端,而且已开源_java ssh客户端-CSDN博客 由于原作者是放在Github上,不方便下载,所以下载下来,转存到码云上,地址:https://gitee.com/lfw1024/web-ssh 为了满足一些小白…

计算机毕业设计选题推荐-股票数据可视化分析与预测-Python爬虫

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Windows10拿到shell后远程登录

一、准备工作 kali机:192.168.19.130 win10:192.168.19.133 主机:192.168.1.73(自己操作可以在kali上,我这是因为反弹的shell在主机上) 二、开启远程登录 1.win10上关闭实时保护,并且运行了…

[C++] C++11详解 (一)

标题:[C] C11详解 (一) 水墨不写bug 目录 前言 一、列表初始化 二、STL的初始化列表(initializer_list —— Cplusplus.com) 三、声明方式(auto、decltype、nullptr) 1.auto ​编辑 2.decltype 正文开始&#x…

Spark环境搭建-Local

目录 Local下的角色分布: Anaconda On Linux 安装 (单台服务器) 1.下载安装 2.国内源 下载Spark安装包 1.下载 2.解压 3.环境变量 测试 监控 Local下的角色分布: 资源管理: Master:Local进程本身 Worker:L…

UE5.4 - 编辑器页面和概念术语

目录 一. 打开新项目 二. 主页面 1.菜单栏 2.工具栏 3.视口 4.内容侧滑菜单/内容浏览器 5.底部工具栏 6.大纲 7.细节面板 三. 虚幻引擎术语 四. 进一步的术语 五. 总结 一. 打开新项目 选择 虚幻引擎 -> 库 -> 启动 选择类型,选择示例的项目,可以把这些都选选…

探索WebSocket在ASP.NET Core中的实时通信应用与实现策略

文章目录 前言一、创建 ASP.NET Core 项目二、配置中间件以支持 WebSocket1.启动类Program.cs2.WebSocket连接管理器3.WebSocket事件管理器4.WebSocket连接入口 三、客户端实现总结 前言 在 ASP.NET Core 中集成 WebSocket 是一种实现实时通信的有效方式。WebSocket 提供了一个…

什么是TCP三次握手和四次挥手,TCP协议详细解析!零基础入门到精通,收藏这一篇就够了

TCP是TCP/IP协议族中一个最核心的协议,它向下使用网络层IP协议,向上为应用层HTTP、FTP、SMTP、POP3、SSH、Telnet等协议提供支持。本文给出TCP报文格式的详细说明,介绍网络数据包传递中如何进行地址解析、建立TCP连接的三次握手过程以及断开T…

【docker】使用github action来自动发布项目到dockerhub

本文首发于 ❄️慕雪的寒舍 使用github action来自动发布项目到dockerhub。参考 https://msdemt.github.io/p/github-action-build-docker/ 博客 1.准备工作 1.1 dockerhub token https://hub.docker.com/settings/security 登录dockerhub,在用户的account settin…

【具体数学 Concrete Mathematics】1.1 递归问题 讲义

【具体数学 Concrete Mathematics】1.1 递归问题 导入 本节(1.1、1.1.1-1.1.3)主要围绕《具体数学》第一章 递归问题(Recurrent Problems)讲义部分的三个问题展开,分别是汉诺塔、平面上的直线以及约瑟夫问题。下面简单介绍一下递归问题和数学…

复数的处理

复数的处理 复数 V V V 定义为在 ( x , y ) (x,y) (x,y)-平面中实数对的有序集合。在这方面,复数可以被视为原点 ( 0 , 0 ) (0,0) (0,0) 上的向量。从这个角度看,复数的加法类似于 ( x , y ) (x,y) (x,y)-平面中向量的加法。 然而,乘法…

Vue3 国际化i18n语言库 网站多语言切换

介绍 在 Vue 3 项目中,国际化(i18n)是一个常见的需求,它允许你的应用支持多种语言,并根据用户的语言偏好显示相应的内容。为了实现国际化,你可以使用 vue-i18n 这个库,它是 Vue 官方推荐的国际…

vue常见**MS题 [2]

vue问题及理解 1、介绍一下vue2和vue3的区别 ‌Vue2和Vue3的主要区别体现在双向数据绑定原理、生命周期钩子函数、API、多根节点、性能和体积等方面。‌‌双向数据绑定原理‌:Vue2使用Object.defineProperty实现双向数据绑定,而Vue3则利用ES6的Proxy特性…

赚大钱和赚小钱,哪个更累?

最近一直在质疑我在做的项目,虽然有同行做到了很好的成绩,但是我还是质疑。 因为一直在赚小钱,接触到的也是新手、底层客户、墨迹客户。 越是钱少的生意,越不好做,客户越挑剔。 而且赚小钱会消磨人的心智。 前几年…

解决前端访问IIS服务器发生跨域请求报错的方法

现在WEB开发都是前后端分离的模式了,当前端代码访问后端WEB服务器时,经常会发生跨域请求报错的问题。   如果是IIS服务器,可以通过下面的方式轻松解决。   由于出现跨域问题是因为服务器返回的页面在返回头中没有设置“Access-Control-Al…

Servlet---Web会话跟踪 ▎token令牌

▍为什么要进行Web会话跟踪? http请求是无状态的,不携带用户信息的,当用户登录成功后,之后在于服务器交互时,服务器并不知道是哪个用户发送的请求 ▍Web会话跟踪 解决方法:在用户成功登录后,后端向前端响应token令牌(token令牌:用户信息),前端保存token令牌每次访问后端都先…

药店药品进销存管理系统药品出库药品入库药品销售-社区医院药品管理-基于JAVA+vue开发

2.2 业务流程分析 在进行业务流程分析时,需要按照原有信息流动过程,逐个地调查分析所有环节的处理业务、处理内容、处理顺序和对处理时间的要求,弄清各个环节需要的信息、信息来源、流经去向、处理方法、计算方法、提供信息的时间和信息形态…

Hadoop 中的大数据技术:Zookeeper安装 (2)

目录 下载地址 本地模式安装 1)安装前准备 2)配置修改 3)操作 Zookeeper 配置参数解读 Zookeeper 集群操作 集群规划 解压安装 配置服务器编号 配置 zoo.cfg 文件 集群操作 Zookeeper 集群启动停止脚本 创建脚本 增加脚本执行权限 …

EmguCV学习笔记 C# 6.1 边缘检测

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

【云原生】MySQL的源码编译

1、实验环境 (1)虚拟机版本:RHEL7.9 (2)主机 主机名称IP地址mysql-node1172.25.254.10mysql-node2172.25.254.20 2、实验步骤 注意:我们的两台主机都要进行MySQL源码编译,并且操作相同&…