前端面试题---->JavaScript

const声明的对象属性和数组的值可以被修改吗?为什么

原因:当使用const声明一个对象或数组时,实际上是保证了对象或数组的引用不会被修改,但对象或数组本身的属性或元素是可以被修改的。这是因为const只能保证指向的内存地址不变,但并不保证内存地址指向的内容不变,而基本类型的变量在内存中存储的是值本身,而不是引用。

http和https协议

http(超文本传输协议):以明文方式发送内容,不提供任何方式的数据加密。

https(超文本传输安全协议):经过http通信,但利用SSL/TLS来加密数据包

加密方式:对称加密和非对称加密

1.对称加密:只有一个key

2.非对称加密:一对key服务端有公钥和私钥,服务器端将公钥发给客户端,客户端将内容用公钥加密发给服务端,服务端收到后用私钥解密获取内容,之后可以用获取的内容作为对称加密的key降低传输成本

tcp是基于连接的,

1.第一次握手:客户端向服务端发送SYN包

2.第二次握手:服务端同意连接,会回复SYN和ACK

3.第三次握手:客户端收到之后,会回复ACK包

4.连接建立

因为发送了三包数据,所以成为三次握手(之所以三次握手而不是两次,就是为了解决网络信道不可靠的问题

http(超文本传输协议):以明文方式发送内容,不提供任何方式的数据加密。

https(超文本传输安全协议):经过http通信,但利用SSL/TLS来加密数据包

图片懒加载的实现主要监测以下几个属性来判断是否要显示:

1. 可视区域:监测页面滚动事件或其他触发条件,判断图片是否进入了可视区域。可以通过计算图片元素与视口的位置关系来确定是否可见。

2. 滚动位置:监测页面滚动的位置,判断图片是否在用户正在浏览的范围内。可以获取滚动条的位置或计算元素的偏移量来判断图片是否在可视范围内。

3. 加载状态:监测图片的加载状态,判断图片是否已经加载完成。可以通过监听图片的"load"事件来检测图片是否成功加载。

4. 图片属性:监测图片元素的自定义属性或其他属性,判断是否需要加载该图片。可以在图片元素上设置自定义属性,例如"data-src"来保存图片的真实URL,然后根据需要进行加载。

通过监测这些属性,可以动态地判断图片是否需要加载和显示。当满足条件时,将图片的真实URL赋值给"src"属性,触发图片的加载和显示。这样可以实现图片的懒加载效果,延迟加载图片,提高页面加载速度和性能。

forEach和for循环区别:

1. 语法:forEach是数组的方法,需要通过数组对象调用,语法为:array.forEach(callback)。for循环是一种通用的循环方式,可以应用于数组和其他可迭代对象,语法为:for(initialization; condition; iteration)。

2. 遍历方式:forEach会自动遍历数组的每个元素,并将每个元素作为参数传递给回调函数。for循环可以自定义遍历的起始位置、结束条件和迭代方式。

3. 控制流程:forEach无法使用break和continue语句来控制循环的流程,一旦开始遍历,会一直执行直到遍历完所有元素。for循环可以使用break和continue语句来控制循环的流程,可以在满足某个条件时提前结束循环或跳过当前迭代。

4. 返回值:forEach没有返回值,它只是用来遍历数组。for循环可以有返回值,可以根据需要返回某个特定的值。

总的来说,forEach适用于需要遍历数组并对每个元素执行相同操作的情况,而for循环更加灵活,可以自定义循环的起始位置、结束条件和迭代方式,并且可以在循环中使用break和continue语句来控制流程。

异步加载(Asynchronous Loading)是指在网页加载过程中,将某些资源(如脚本、样式表、图片等)的加载与页面的渲染过程分离。通过异步加载,浏览器可以在加载资源的同时继续渲染页面,不会阻塞页面的展示。常见的异步加载方式包括使用

string类型转换为number类型的

隐式转换:

1.隐式转换:“-”、“*”、“/”

2.强制类型转换:Number、parseInt、parseFloat(当字符串一开始不是数字时,直接输出NaN)

Number()

注释:

  • 如果字符串中包含非数字或者是undefined,则会转换为NAN
  • 如果是一个空字符串或者NAN,则都会转换为0
  • boolean类型,true转为1,false转为0

parseInt()
parseFloat()

注释:

  • 可以从左向右将字符串中最先的连续的数字提取出来
  • 如果对于非string类型使用则会先转换为string类型,再做操作,例如;true会先变为'true'再变为NAN,而不是1

number转换为String类型的

  • a.toString()

注:null和undefined没有toString方法

  • String()

    this的指向问题

    在浏览器环境中,全局作用域中的this指向window对象。

    函数中的this:

    在函数中,this的值取决于函数的调用方式。

    如果函数作为对象的方法被调用,this指向调用该方法的对象。

    如果函数作为独立函数调用,this指向全局对象(浏览器环境中为window,Node.js环境中为global)。

    如果函数使用new关键字调用,this指向新创建的对象。

    箭头函数:this的指向是上级作用域

    如果函数使用call()、apply()或bind()方法调用,this指向作为参数传递的对象。

    箭头函数的this指向在定义时就确定了,因此无法通过call()、apply()或bind()方法来改变箭头函数的this指向。

    call、apply和bind的区别

    1.参数传递:call和apply的参数传递方式不同,call需要将参数逐个传递,而apply需要将参数封装成数组传递。bind方法则可以在绑定时传递参数,也可以在执行时传递参数。

    2.执行时机:call和apply会立即执行函数,而bind返回的是一个新函数,需要手动调用才会执行。

    3.返回值:call和apply的返回值是函数的执行结果,而bind返回的是一个新函数。

    块儿级作用域闭包的作用闭包的应用:

闭包可能存在的问题:内存泄漏(应该被回收的没有被回收) 

注释:闭包本身并不会直接导致内存泄漏,但不正确地使用闭包可能会导致内存泄漏的情况发生。

如果一个全局变量被赋值为一个函数,而这个函数正好一直用到嵌套函数里面的变量,就会导致变量不会被销毁,从而导致内存泄漏。

数组和集合的区别

1.元素的唯一性:数组中的元素可以重复,而集合中的元素是唯一的

2.动态性:数组的长度是固定的,一旦创建后不能改变。集合的长度是可变的

3.元素类型:数组可以存储任意类型的元素,包括基本类型和对象。集合通常只能存储对象类型的元素

4.存储方式:数组是一种有序的数据结构,每个元素通过索引访问。集合是一种无序的数据结构

严格模式通过禁用一些不安全的语法特性,强制执行一些最佳实践,提供更严格的错误检查和错误处理,以及优化JavaScript引擎的执行速度。

在JavaScript代码中,可以通过在脚本文件或函数体的开头添加"use strict";来启用严格模式。例如:

"use strict";

在严格模式下,一些常见的行为将被禁止,例如

变量必须先声明后使用

不允许使用未声明的变量

不允许对只读属性赋值

this在全局作用域下为undefined

混杂模式(Quirks Mode):

是指浏览器在渲染网页时使用的一种兼容旧版本浏览器的渲染模式。

在混杂模式下,浏览器会尽量兼容旧版本的HTML和CSS规范,以保证旧网页的正确显示。

在HTML文档的开头没有正确的DOCTYPE声明,或者根本没有DOCTYPE声明,浏览器将会触发混杂模式

link和@import区别:

1.link是HTML标签,@import是CSS语法规则,所以link比@import先被加载;

2.link支持使用JavaScript控制DOM去改变样式,而@import不支持。

setTimeout主要用于单次延迟执行,而setInterval用于持续重复执行。

JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。

所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所做的密码变换。

虚拟DOM(virtual DOM)简称vdom,是一个普通的js对象,用来描述真实dom结构,因为它不是真实的DOM,所以称为虚拟DOM

localStorage中存储的数据没有过期时间,除非手动删除或清除浏览器缓存,否则数据会一直存在。而sessionStorage中存储的数据只在当前会话(当前窗口或标签页)有效,关闭窗口或标签页后数据会被清除。

localStorage和sessionStorage都是在客户端存储的,因此存储的数据对于用户来说是可见的,不适合存储敏感信息。

session、cookie和token的区别:

Session数据是存在服务器中的,cookie数据存放在浏览器当中,token是开发定义的,session是http协议规定的;

token可以跨域,session不可以跨域,它是与域名绑定的

promise、generator和async/await三者的区别:

三者都是为了解决异步产生的,之前通过回调函数解决异步,便出现了回掉地狱(callback hell)的问题:

没有顺序可言:嵌套函数执行带来的是调试困难,不利于维护与阅读

耦合性太强:一旦某一个嵌套层级有改动,就会影响整个回调的执行 

为了解决回掉地狱(callback hell)的问题,便出现了promise,它可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数,并且它的链式调用更能让人接受,也符合我们同步的思想,但它的缺点是:

Promise的内部错误使用try catch捕获不到,因为当异步函数抛出异常时,对于宏任务    (setTimeout、setInterval、Ajax、Dom事件)而言,执行函数时已经将该函数推入栈,此时并不在 try-catch 所在的栈,所以 try-catch 并不能捕获到错误。对于微任务(Promise、async/await)而言,比如 promise 的构造函数的异常只能被自带的 reject 也就是.catch 函数捕获到。

1.Generator函数可以通过yield关键字来暂停和恢复函数的执行,从而可以更灵活地控制异步操作的执行顺序。而Promise是通过then()方法来处理异步操作的结果,不能直接控制异步操作的执行顺序。

2.错误处理:Generator需要手动在代码中编写错误处理逻辑,通常使用try-catch语句来捕获和处理错误。而async/await可以直接在异步函数内部使用try-catch语句来捕获和处理错误,使错误处理更加简洁。Promise通过catch()方法来处理操作的失败。

3.Generator函数可以通过yield语句返回多个值,每次调用next()方法都会返回一个新的值。而Promise只能返回一个结果值。

4.Generator需要手动调用next()方法来控制异步操作的执行和恢复。而async/await会自动等待Promise对象的解析,使得异步操作的执行更加简单和直观。Promise通过resolve()和reject()方法来控制异步操作的状态

实现浅拷贝的方法有:

  1. 赋值操作符(=)
  2. 扩展运算符方式:cloneObj = {...obj};cloneArr= [...arr]

实现深拷贝的方法有:

1.JSON.parse(JSON.stringify()):利用JSON的序列化和反序列化操作,可以实现简单的深拷贝。通过将对象或数组转换为JSON字符串,再将JSON字符串转换回对象或数组,就可以得到一个全新的对象或数组。这种方法简单易用,但不能复制特殊类型的对象,如函数、正则表达式和特殊类型的对象

2.如lodash的cloneDeep()方法

3.递归复制

JSON.stringify()和JSON.parse()的区别

注:在使用JSON.parse()需要注意一点,由于此方法是将JSON字符串转换成对象,所以你的字符串必须符合JSON格式

正则表达式

防抖和节流的异同

防抖和节流都是用于控制函数的执行频率,但它们的实现方式和应用场景有所不同。

防抖(Debounce)的实现思路是在事件触发后,等待一段时间(如300毫秒),如果在这段时间内没有再次触发事件,则执行函数。如果在等待时间内又触发了事件,则重新计时。防抖适用于一些频繁触发的事件,比如窗口大小改变、搜索框输入等,可以减少函数的执行次数,提升性能。

节流(Throttle)的实现思路是在事件触发后的一段时间内,只执行一次函数。比如每隔300毫秒执行一次函数。节流适用于一些高频触发的事件,比如滚动事件、鼠标移动事件等,可以控制函数的执行频率,避免过多的计算和渲染。

区别:

1. 触发频率:防抖是在事件触发后等待一段时间执行函数,节流是在一段时间内只执行一次函数。

2. 执行时机:防抖是在事件停止触发后执行函数,节流是在一段时间内定时执行函数。

3. 应用场景:防抖适用于频繁触发的事件,节流适用于高频触发的事件。

4. 执行次数:防抖可能会在事件停止触发后执行一次或多次函数,节流在一段时间内只执行一次函数。

预处理语言

预处理语言在编辑样式方面提供了更多的功能和灵活性,使得样式的编写更加高效、可维护和可复用。它们提供了一些高级特性,帮助开发者更好地组织和管理样式代码,并提供了更多的工具和技术来增强样式的表现力和适应性。

作用域链

原型链 

事件冒泡:

通过给子元素和父元素添加绑定事件,当点击子元素的时候,先触发子元素的事件绑定,然后在冒泡到父元素,进而触发父元素的事件绑定

事件代理:

如果要操作的子标签过多,可以选择绑定父标签,然后在通过event.target判断触发事件的元素是否是你要的子元素,然后再进行操作

简述页面从发送http请求到渲染页面的全过程

  1. 用户在浏览器输入URL并按下回车键,浏览器开始解析URL,根据协议(通常是HTTP或HTTPS)发起对服务器的请求。
  2. 浏览器向DNS服务器查询域名对应的IP地址,获取服务器的IP地址。
  3. 浏览器利用获取到的IP地址与服务器建立TCP连接,通过三次握手建立连接。
  4. 建立TCP连接后,浏览器向服务器发送HTTP请求,请求中包含请求的资源、请求方法(GET、POST等)、请求头等信息。
  5. 服务器接收到请求后,根据请求的资源和方法进行处理,然后返回HTTP响应给浏览器。响应中包含状态码、响应头和响应体等信息。
  6. 浏览器接收到服务器返回的HTTP响应后,开始解析响应头和响应体。根据响应头中的信息判断响应的类型(如HTML、CSS、JavaScript等)。
  7. 如果响应是HTML类型,浏览器开始解析HTML文档,构建DOM树;解析CSS文件,构建CSSOM树;执行JavaScript代码,生成页面所需的DOM树和CSSOM树。
  8. 浏览器根据DOM树和CSSOM树结合渲染引擎(如WebKit、Blink等)进行页面布局和绘制,最终将页面内容呈现给用户。
  9. 用户在浏览器上看到页面内容,与页面交互,完成整个页面加载和渲染的过程。

简述JavaScript的同源策略

JavaScript的同源策略是一种浏览器安全策略,用于限制一个网页中的脚本只能与来自同一源(协议、域名、端口号都相同)的资源进行交互,防止恶意网站通过脚本获取用户的敏感信息或对其他网站进行攻击。

常见的HTTP响应状态码包括:

1xx(信息性状态码)

指示请求已被接收,继续处理。

  • 100 Continue:服务器已经收到请求的一部分,客户端可以继续发送剩余部分。
  • 101 Switching Protocols:服务器将遵从客户的请求转换到另外一种协议。

2xx(成功状态码)

指示请求已成功接收、理解、接受或处理。

  • 200 OK:请求成功。
  • 201 Created:请求已经被实现,新资源已经创建。
  • 204 No Content:服务器成功处理请求,但没有返回任何内容。

3xx(重定向状态码)

需要客户端执行进一步的操作才能完成请求。

  • 301 Moved Permanently:请求的资源已被永久移动到新位置。
  • 302 Found:请求的资源临时移动到新位置。

4xx(客户端错误状态码)

指示客户端发送的请求有错误。

  • 400 Bad Request:请求无效。
  • 403 Forbidden:服务器拒绝请求。
  • 404 Not Found:请求的资源不存在。

5xx(服务器错误状态码)

指示服务器在处理请求时发生错误。

  • 500 Internal Server Error:服务器内部错误。
  • 503 Service Unavailable:服务器暂时不可用。

HTTP响应状态码可以帮助开发人员诊断和解决问题,同时也可以向用户提供有用的信息。根据不同的状态码,客户端和开发人员可以了解请求的处理情况,并采取相应的措施。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT赋能大气科学:GPT与Python结合应用遥感降水数据处理、ERA5大气再分析数据的统计分析、干旱监测及风能和太阳能资源评估等

目录 专题一 AI领域常见工具讲解 专题二 POE平台及ChatGPT使用方法 专题三 提示词工程 专题四 科研常见应用场景 专题五 Python简明教程 专题六 GPT科研绘图 专题七 GPT辅助下载数据 专题八 遥感降水数据 专题九 数据产品评估 专题十 ERA5全球大气再分析数据 专题十…

python和Vue开发的RBAC用户角色权限管理系统

后端框架:python的FastAPI作为后端服务和python-jose作为JWT认证 前端框架:Vue3构建页面和Vue Router作为路由管理,Pinia作为数据存储,Vite作为打包工具 可以实现菜单控制和路由控制,页面里面有按钮权限控制&#xf…

【深度学习|基础算法】2.AlexNet学习记录

AlexNet示例代码与解析 1、前言2、模型tips3、模型架构4、模型代码backbonetrainpredict 1、前言 AlexNet由Hinton和他的学生Alex Krizhevsky设计,模型名字来源于论文第一作者的姓名Alex。该模型以很大的优势获得了2012年ISLVRC竞赛的冠军网络,分类准确率…

【无标题】C高级325

练习1:输入一个数,实现倒叙123-》321 练习2:输入一个,判断是否是素数 练习3:输入一个文件名, 判断是否在家目录下存在, 如果是一个目录,则直接输出是目录下的sh文件的个数 如果存在则判断是否是…

spring cloud 限流熔断配置

springcloud 微服务网关 zuul.strip-prefixtrue zuul.routes.postgres-client.path /ps01/** zuul.routes.postgres-client.service-idpostgres-client zuul.routes.postgres-client02.path/ps02/** zuul.routes.postgres-client02.service-idpostgres-client02 zuul.semaphor…

密码学之哈希碰撞和生日悖论

哈希碰撞 哈希碰撞是指找到两个不一样的值,它们的哈希值却相同 假设哈希函数的取值空间大小为k ,计算次数为n 先算每个值不一样的概率P’ 所以至少两个值相同(即存在哈希碰撞)的概率P为 生日悖论 假设班里有50个人,求班里至少两个人相同…

亚信安慧AntDB:轻松解决数据处理挑战

AntDB一直秉承着“技术生态”的理念,不断进行技术创新和功能增强,以保持与先进数据库系统的竞争力。作为一款致力于提升数据库处理性能和稳定性的系统,AntDB在技术上始终保持敏锐的洞察力,不断汲取国内外先进技术的精华&#xff0…

【C语言】Infiniband驱动__mlx4_init_one函数

一、注释 Linux内核驱动程序中的部分,属于Mellanox网卡驱动mlx4的初始化过程。 // Mellanox 以太网驱动主程序代码 static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data,struct mlx4_priv *priv) {int err; // 错误码变量int nvfs[MLX4_MAX_PORTS…

【vue3学习笔记(二)】(第141-143节)初识setup;ref函数_处理基本类型;ref函数_处理对象类型

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 本篇内容对应课程第141-143节 课程 P141节 《初识setup》笔记 1、setup是所有组合式API“表演的舞台”,组件中所用到的所有数据、方法、监视数据、生命周期钩子等都需要配置在setup中。 2、setup的两种返回值&…

【MySQL】4.MySQL日志管理与数据库的备份和恢复

备份的目的只要是为了灾难恢复,备份还可以测试应用,回滚数据,修改和查询历史数据,审计等 日志在备份、恢复中起着重要作用 一、数据库备份的重要性 在生产环境中,数据的安全性至关重要 任何数据丢失都可能产生严重的…

数组的常见算法

数组的常见算法 数值型数组特征值统计 这里的特征值涉及到:平均值、最大值、最小值、总和等 举例1:数组统计:求总和、均值 public class TestArrayElementSum {public static void main(String[] args) {int[] arr {4,5,6,1,9};//求总和、…

Android 性能优化实例分享-内存优化 兼顾效率与性能

背景 项目上线一段时间后,回顾重要页面 保证更好用户体验及生产效率,做了内存优化和下载导出优化,具体效果如最后的一节的表格所示。 下面针对拍摄流程的两个页面 预览页 导出页优化实例进行介绍: 一.拍摄前预览页面优化 预览效果问题 存在…

实时通讯技术实现

实时通讯技术实现 前言 在CS架构中,经常会有实时通信的需求。客户端和服务端建立连接,服务端实时推送数据给客户端。本文介绍几种常见的实现方式,希望能给读者们一点点参考。 实时通讯的主要实现技术 长轮询(Long Polling) WebSocket 服务器发…

搜索(find a way, Pots)

Find a way 思路:这一题看似简单其实不然,有很多特办条件,如果当这个M和Y都在KFC的时候就会导致步数为0 ,或者可以这样说:只有两人都能到达才能算入答案。 我们可以使用bfs来写这道题,这不过这道题目不需…

ChatGPT,来一份3·28雷布斯米时捷上市发布会即时发言稿

你新招了一个秘书。上班第一天,你对他说:“3月28号我可能会受邀参加雷老板的米时捷’上市发布会,届时我可能会有十分钟的发言机会,你现在准备一篇演讲稿。” 秘书问你有何指导意见? 你自己都不知说啥子,能…

探秘 RabbitMQ 的设计理念与核心技术要点

目录 一、消息中间件介绍 1.1 消息中间件的作用 二、RabbitMQ 2.1 核心概念 2.2 生产者发送消息过程 2.3 消费者接收消息过程 2.4 RabbitMQ 为何要引入信道(channel) 2.5 消费模式 一、消息中间件介绍 消息队列中间件(message queue middleWare, MQ)指…

前端发版上线出现白屏问题

目录 路由配置问题资源缓存问题首屏加载过慢 :喂,你的页面白啦! 出现上线白屏的问题有很多,如:配置错误、缓存问题、浏览器兼容问题,根据不同情况去解决。 路由配置问题 问题描述: 在vue开发…

ValueError: Cannot load file containing pickled data when allow_pickle=False

问题描述 遇到报错:ValueError: Cannot load file containing pickled data when allow_pickleFalse 解决方案 经过查阅有人说是与numpy的版本有关,但是还是不要轻易改变环境中的版本,不一定哪个地方就会报错。这里放个解决方案:…

【详细讲解yarn的安装和使用】

🌈个人主页:程序员不想敲代码啊🌈 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家🏆 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提…

探索MongoDB:发展历程、优势与应用场景

一、MongoDB简介 MongoDB 始于 2007 年,由 Dwight Merriman、Eliot Horowitz 和 Kevin Ryan –(DoubleClick 的主理团队)共同创立。 DoubleClick 是一家互联网广告公司(现隶属于 Google),公司团队开发并利…