前端面试题---->JavaScript

news2024/11/18 6:36:40

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

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

相关文章

搭载前净柔泉女冲技术的科勒马桶盖,你的家中必备

近几年智能家居逐渐成为众多家庭的首选,尤其是智能马桶已经逐渐变成家中必备,但智能马桶动辄几千上万的价格让很多家庭望而却步,于是智能马桶盖应运而生。科勒清舒宝智能便盖不仅可以适配市面上大多数马桶,而且功能丰富&#xff0…

基于springboot+vue调用百度ai实现车牌号识别功能

百度车牌号识别官方文档 结果视频演示 后端代码 private String getCarNumber(String imagePath, int count) {// 请求urlString url "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate";try {byte[] imgData FileUtil.readFileByBytes(imagePath);Stri…

精酿啤酒:多阶段发酵工艺的特点与优势

Fendi Club啤酒采用多阶段发酵工艺,这种工艺在啤酒酿造中具有显著的特点和优势。 首先,多阶段发酵工艺是一种复杂的酿造过程,它包括多个阶段的发酵和陈化过程。这种工艺需要切确控制每个阶段的时间、温度和酵母种类等参数,以确保…

【揭秘】企讯通106短信通知:那些你不可不知的“幕后功臣”

在日常生活中,你是否留意过那些来自“106”开头的短信?它们悄无声息地出现在你的手机收件箱,为你带来账单提醒、验证码、优惠活动等各类重要信息。看似平淡无奇的“106短信通知”,实则蕴含着丰富的科技力量与智慧结晶。今天&#…

together.ai简介

Together AI Solutions | Fastest Tools for Building Private Models for Enterprise Quickstart

【linux深入剖析】基础IO操作 | 使用Linux库函数实现读写操作 | 文件相关系统调用接口

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 前言1.复习C文件IO相关操…

设计模式深度解析:深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 ✨

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 开篇: 欢迎来到设计模式的神秘…

如何在数字化转型中确保数据安全

随着科技的飞速发展,数字化转型已成为企业发展的必然趋势。数字化转型是指企业利用数字技术对业务流程、组织结构和商业模式进行全面创新和变革,以提高企业的竞争力和创新能力。然而,在数字化转型过程中,数据安全问题日益凸显&…

胖东来:超越零售巨头山姆和Costco的秘密武器

在零售业的江湖中,胖东来这个名字正在悄然崭露头角。3月26日,胖东来创始人于东来豪言壮志地表示,未来3-5年内,他的目标是超越零售巨头山姆和Costco。这不仅仅是一个口号,而是胖东来凭借自身实力,逐步迈向更…

为什么requests不是python标准库?

在知乎上看到有人问:为什么requests不是python标准库? 这确实是部分人困惑的问题,requests作为python最受欢迎的http请求库,已经成为爬虫必备利器,为什么不把requests直接装到python标准库里呢?可以省去第…

什么是公网IP?

公网IP,即公开网络IP地址,是指在互联网中公开可见、可访问的IP地址。每个设备在连接互联网时,都需要一个唯一的公网IP地址,以便其他设备可以定位并与之通信。 尽管公网IP在网络通信中具有重要作用,但它也带来了一些安全…

扫码登录到底是怎么实现的?

扫码登录的原理,其实很简单。 扫码登录的本质是,通过已经登录过的 App 应用,扫描未登录的 Web 端程序中的二维 码, 通过某种机制触发登录凭证的写入从而实现 Web 端自动登录的过程。 1、首先,在网页端打开登录页面&…

低功耗电子方案开发定制

低功耗电子方案开发定制 东莞市酷得智能科技有限公司是一家专注于为客户提供高质量解决方案的创新型科技公司。成立于2018年,我们的使命是通过技术创新和卓越的服务,帮助客户实现业务目标和价值最大化。 作为一家小而精悍的公司,我们拥有一支…

QML | JavaScript作用域和命名解析2

QML | JavaScript作用域和命名解析3.绑定的作用域对象 属性绑定是QML中最常见的JavaScript应用。属性绑定关联了一个JavaScript表达式的结果和对象的一个属性,该属性所归属的对象被称为绑定的作用域对象。在下面的代码中,Item对象就是一个绑定的作用域对象: ​ 绑定可以…

uniapp流浪动物救助小程序Java宠物领养小程序springboot

uniapp流浪动物救助小程序Java宠物领养小程序springboot 代码40块,需要的私聊 前台基于uniapp小程序 后台管理基于springbootvue前后端分离项目 开发语言:Java 框架:springboot vue JDK版本:JDK1.8(或11&#xf…

张宇1000题要刷崩溃了值不值得坚持做?

可以做1000题,但是复习效果可能不理想,因为1000题的内容难度高,最好基础好,能全程跟张宇的选择,否则容易浪费时间。 从题型上来看,1000题更注重于综合类的题目,题型上有些非常规。 使用1000题…

每日一题 --- 链表相交[力扣][Go]

链表相交 题目:面试题 02.07. 链表相交 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交**:** 题目数据 保证 整个链式结…

【计算机操作系统】深入探究CPU,PCB和进程工作原理

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

【前端】Layui的表格常用功能,表单提交事件,表格下拉按钮点击事件,表格外的按钮点击事件

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《前端》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握…

短袖有什么牌子可以推荐?质量最好的短袖品牌推荐

天气转热,大家都开始给自己选一些穿着舒适且好看的短袖。但是不少朋友都应该发现,目前市面上的服装品牌质量参差不齐,而且有一些短袖穿身上还会瘙痒等情况,尤其是大家喜欢入手的网红或明星代言的牌子更严重。 那么短袖应该怎么选…