![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
前端面试JS篇
本专栏专注于前端面试时常见的JavaScript知识点,持续更新
叫我阿东就行
前端的那块砖
展开
-
令人惊艳的JS单行代码
【代码】令人惊艳的JS单行代码。原创 2024-06-04 10:27:17 · 137 阅读 · 0 评论 -
axios的理解和使用
axios中文文档。原创 2024-04-06 11:10:28 · 763 阅读 · 0 评论 -
forEach使用的注意点
若forEach方法的参数是。原创 2024-04-03 11:34:15 · 300 阅读 · 0 评论 -
40.谈谈你对this的理解
this关键字是函数运行时自动生成的一个对象,只能在函数内部使用,总指向调用它的对象。原创 2024-02-26 18:17:28 · 363 阅读 · 0 评论 -
41.什么是函数缓存
函数缓存就是将函数运算的结果进行缓存,本质上就是以空间换取时间。原创 2024-02-26 18:53:34 · 368 阅读 · 0 评论 -
39.instanceof和typeof的区别
typeof返回一个字符串,表示未经计算的操作数的类型(对象或原始值的表达式)如果我们要判断一个变量是否存在,我们不能这样:if(a),这样会报错,可以使用typeof,看是否返回undefined。原创 2024-02-26 16:56:44 · 346 阅读 · 0 评论 -
38.JS继承的方式
每一个构造函数都有一个原型对象(prototype),原型对象又包含一个指向构造函数的指针,而实例又包含一个指向原型对象的指针(即__proto__),这个连接存在于实例与构造函数的原型对象之间,而不是存在于实例与构造函数之间。如下图,person是Person的实例化对象s1和s2共用同一个实例对象,内存空间共享。原创 2024-02-26 15:59:38 · 821 阅读 · 0 评论 -
38.JS数组常用api
pop() 方法不接收参数,用于删除并返回数组的最后一个元素。该方法会改变原始数组。原创 2024-02-21 15:34:34 · 896 阅读 · 0 评论 -
37.ES6新特性
微信公众号关注IQ前端,图片转载于此公众号,非常感谢博主的总结!!!原创 2024-02-21 13:17:58 · 346 阅读 · 0 评论 -
36.解决跨域的九种方式实现原理
CORS支持所有类型的HTTP请求,是跨域HTTP请求的根本解决方案JSONP只支持GET请求,JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。不管是Node中间件代理还是nginx反向代理,主要是通过同源策略对服务器不加限制。日常工作中,用得比较多的跨域方案是cors和nginx反向代理。原创 2024-02-19 13:46:42 · 1650 阅读 · 0 评论 -
35.JS中的垃圾回收机制与内存泄漏
JavaScript代码运行时,需要分配内存空间来储存变量和值。当变量不在参与运行时,就需要系统收回被占用的内存空间,这就是垃圾回收。虽然浏览器可以进行垃圾自动回收,但是当代码比较复杂时,垃圾回收所带来的代价比较大,所以应该尽量减少垃圾回收。原创 2024-02-18 09:52:29 · 829 阅读 · 0 评论 -
34.setTimeout、setInterval、requestAnimationFrame 各有什么特点?
基本可以保证在 16.6 毫秒内只执行一次(不掉帧的情况下),并且该函数的延时效果是精确的,没有其他定时器时间不准的问题,当然你也可以通过该函数来实现。以上代码在浏览器环境中,如果定时器执行过程中出现了耗时操作,多个回调函数会在耗时操作结束以后同时执行,这样可能就会带来性能上的问题。其实这个观点是错误的,因为 JS 是单线程执行的,如果前面的代码影响了性能,就会导致。第二,它存在执行累积的问题,请看以下伪代码。基本一致,只是该函数是每隔一段时间执行一次回调函数。是延时多久,那就应该是多久后执行。原创 2024-02-18 09:46:02 · 385 阅读 · 0 评论 -
33.Promise的基本用法
方法返回的是一个新的Promise实例(不是原来那个Promise实例)。方法时的结果成功的时候是回调函数的参数也是一个数组,这个数组按顺序保存着每一个promise对象。方法的回调函数不接受任何参数,这意味着没有办法知道,前面的 Promise 状态到底是。Promise对象除了有then方法,还有一个catch方法,该方法相当于。方法可以完成并行任务, 它接收一个数组,数组的每一项都是一个。方法传递一个参数,返回一个promise对象,如果为。时调用,第二个回调函数是Promise对象的状态变为。原创 2024-02-18 09:23:17 · 870 阅读 · 0 评论 -
32.谈谈你对Promise的理解
状态的改变是通过 resolve() 和 reject() 函数来实现的,可以在异步操作结束后调用这两个函数改变 Promise 实例的状态,它的原型上定义了一个 then 方法,使用这个 then 方法可以为两个状态的改变注册回调函数。当把一件事情交给promise时,它的状态就是Pending,任务完成了状态就变成了Resolved、没有完成失败了就变成了Rejected。,它是一个对象,可以获取异步操作的消息,他的出现大大改善了异步编程的困境,,它比传统的解决方案回调函数和事件更合理和更强大。原创 2024-02-18 09:15:54 · 303 阅读 · 0 评论 -
31.setTimeout、Promise、Async/Await 的区别
await的含义为等待,也就是 async 函数需要等待await后的函数执行完成并且有了返回结果(Promise对象)之后,才能继续执行下面的代码。await通过返回一个Promise对象来实现同步的效果。async 函数返回一个 Promise 对象,当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再执行函数体内后面的语句。可以理解为,是让出了线程,跳出了 async 函数体。,打印p的时候,是打印的返回结果,一个Promise实例。, 会先执行then/catch等,当。原创 2024-02-18 09:11:00 · 363 阅读 · 0 评论 -
30.JS异步编程实现的方式
JavaScript中的异步机制可以分为以下几种:原创 2024-02-18 09:02:27 · 338 阅读 · 0 评论 -
29.如何判断一个对象属于某个类
第一种方式,使用 instanceof 运算符来判断构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。 第二种方式,通过对象的 constructor 属性来判断,对象的 constructor 属性指向该对象的构造函数,但是这种方式不是很安全,因为 constructor 属性可以被改写。 第三种方式,如果需要判断的是某个内置的引用类型的话,可以使用 Object.prototype.toString() 方法来打印对象的[[Class]] 属性来进行判断。原创 2024-02-18 08:58:09 · 540 阅读 · 0 评论 -
28.JS中数组有哪些原生方法
数组和字符串的转换方法:toString()、toLocalString()、join() 其中 join() 方法可以指定转换为字符串时的分隔符。 数组尾部操作的方法 pop() 和 push(),push 方法可以传入多个参数。 数组首部操作的方法 shift() 和 unshift() 重排序的方法 reverse() 和 sort(),sort() 方法可以传入一个函数来进行比较,传入前后两个值,如果返回值为正数,则交换两个参数的位置。 数组连接的方法 concat() ,返回的是拼接好的数组原创 2024-02-18 08:48:49 · 373 阅读 · 0 评论 -
27.JS中isNaN和Number.isNaN的区别
【代码】27.JS中isNaN和Number.isNaN的区别。原创 2024-02-18 08:41:57 · 333 阅读 · 0 评论 -
26.执行上下文/作用域链/闭包
任何不在函数内部的都是全局执行上下文,它首先会创建一个全局的window对象,并且设置this的值等于这个全局对象,一个程序中只有一个全局执行上下文。在一个函数执行之前,也会创建一个函数执行上下文环境,跟全局执行上下文类似,不过函数执行上下文会多出this、arguments和函数的参数。比如,函数 A 内部有一个函数 B,函数 B 可以访问到函数 A 中的变量,那么函数 B 就是闭包。,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。闭包有两个常用的用途;原创 2024-02-16 12:50:56 · 794 阅读 · 0 评论 -
25.原型链和原型(非常重要),听说你还没搞懂??
可以看到修改原型的时候p的构造函数不是指向Person了,因为直接给Person的原型对象直接用对象赋值时,它的构造函数指向的了根构造函数Object,所以这时候。JavaScript 对象是通过引用来传递的,创建的每个新对象实体中并没有一份属于自己的原型副本。原型链的尽头一般来说都是 Object.prototype 所以这就是新建的对象为什么能够使用 toString() 等方法的原因。原型链上的所有原型都是对象,所有的对象最终都是由。方法,可以通过这个方法来获取对象的原型。,所以,原型链的终点是。原创 2024-02-16 12:40:56 · 537 阅读 · 0 评论 -
25.ajax、axios、fetch的区别
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。Ajax 即“AsynchronousJavascriptAndXML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。Fetch的代码结构比起ajax简单多。原创 2024-02-16 11:59:45 · 367 阅读 · 0 评论 -
24.for...of遍历对象
of是作为ES6新增的遍历方式,允许遍历一个含有iterator接口的数据结构(数组、对象等)并且返回各项的值,如果需要遍历的对象是类数组对象,用Array.from转成数组即可。原创 2024-02-16 11:53:32 · 805 阅读 · 0 评论 -
23.JS中的for...in和for...of的区别
of 是ES6新增的遍历方式,允许遍历一个含有iterator接口的数据结构(数组、对象等)并且返回各项的值,和ES3中的for…原创 2024-02-16 11:38:33 · 332 阅读 · 0 评论 -
22.常用的DOM操作
修改 DOM 元素这个动作可以分很多维度,比如说移动 DOM 元素的位置,修改 DOM 元素的属性等。原创 2024-02-16 11:34:24 · 343 阅读 · 0 评论 -
21.ES6模块与CommonJS模块有什么异同?
ES6 Module和CommonJS模块的区别:ES6 Module和CommonJS模块的共同点:原创 2024-02-15 22:48:34 · 452 阅读 · 0 评论 -
20. JavaScript为什么要进行变量提升,它导致了什么问题?
这么做就是为了提高性能,如果没有这一步,那么每次执行代码前都必须重新解析一遍该变量(函数),而这是没有必要的,因为变量(函数)的代码并不会改变,解析一遍就够了。在这个函数中,原本是要打印出外层的tmp变量,但是因为变量提升的问题,内层定义的tmp被提到函数内部的最顶部,相当于覆盖了外层的tmp,所以打印结果为undefined。,这个变量对象是执行上下文的一个属性,它包含了函数的形参、所有的函数和变量声明,这个对象的是在代码解析的时候创建的。,创建了执行上下文,初始化了一些代码执行时需要用到的对象。原创 2024-02-15 22:46:56 · 450 阅读 · 0 评论 -
19.JavaScript脚本延迟加载的方式有哪些?
延迟加载就是等页面加载完成之后再加载 JavaScript 文件。原创 2024-02-15 22:42:33 · 708 阅读 · 0 评论 -
18.谈谈你对JSON的理解
在前端通过将一个符合 JSON 格式的数据结构序列化为 JSON 字符串,然后将它传递到后端,后端通过 JSON 格式的字符串解析后生成对应的数据结构,以此来实现前后端数据的一个传递。因为 JSON 的语法是基于 js 的,因此很容易将 JSON 和 js 中的对象弄混,但是应该注意的是。在 js 中提供了两个函数来实现 js 数据结构和 JSON 格式的转换处理,,因此大多数的 js 对象是不符合 JSON 对象的格式的。,JSON 中对象格式更加严格,比如说在。原创 2024-02-15 22:39:32 · 543 阅读 · 0 评论 -
17.JS中的object、map和weakMap
而ES6提供的Map数据结构类似于对象,但是它的键不限制范围,可以是任意类型,是一种更加完善的Hash结构。如果Map的键是一个原始数据类型,只要两个键严格相同,就视为是同一个键。因此,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的。其clear()方法已经被弃用,所以可以通过创建一个空的WeakMap并替换原对象来实现清除。WeakMap 对象也是一组键值对的集合,本质上就是键值对的集合,但是普通的。原创 2024-02-15 22:36:12 · 929 阅读 · 0 评论 -
16.扩展运算符的作用及使用场景
这里参数对象是个数组,数组里面的所有对象都是基础数据类型,将所有基础数据类型重新拷贝到新的数组中。对象要求不能直接修改,可以通过扩展运算符把修改路径的对象都复制一遍,然后产生一个新的对象返回。同样,如果用户自定义的属性,放在扩展运算符后面,则扩展运算符内部的同名属性会被覆盖掉。对象的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。数组的扩展运算符可以将一个数组转为用逗号分隔的参数序列,且每次只能展开一层数组。方法的第一个参数是目标对象,后面的参数都是源对象。原创 2024-02-14 20:39:36 · 403 阅读 · 0 评论 -
15.箭头函数与普通函数的区别
对象obj的方法b是使用箭头函数定义的,这个函数中的this就永远指向它定义时所处的全局执行环境中的this,即便这个函数是作为对象obj的方法调用,this依旧指向Window对象。但是由于箭头函数时没有自己的this的,且this指向外层的执行环境,且不能改变指向,所以不能当做构造函数使用。在箭头函数中访问arguments实际上获得的是它外层函数的arguments值。箭头函数不会创建自己的this, 所以它没有自己的this,它。是无法形成一个单独的执行环境的,它依旧是处于全局执行环境中。原创 2024-02-14 20:35:28 · 450 阅读 · 0 评论 -
14.如果new一个箭头函数的会怎么样
箭头函数是ES6中的提出来的,它没有prototype,也没有自己的this指向,更不可以使用arguments参数,所以不能New一个箭头函数。所以,上面的第二、三步,箭头函数都是没有办法执行的。原创 2024-02-14 20:30:36 · 374 阅读 · 0 评论 -
13.let、const、var的区别
包括,let和const具有块级作用域,var不存在块级作用域。var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否在会报错。在变量声明时,var 和 let 可以不用设置初始值。在使用let、const命令声明变量之前,该变量都是不可用的。,后声明的同名变量会覆盖之前声明的遍历。const和let不允许重复声明变量。浏览器的全局对象是window,Node的全局对象是global。let和const都是ES6新增的用于创建变量的语法。使用var声明的变量不存在暂时性死区。原创 2024-02-14 20:27:47 · 684 阅读 · 0 评论 -
12.object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别
【代码】12.object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别。原创 2024-02-14 20:23:31 · 624 阅读 · 0 评论 -
11.JavaScript 中如何进行隐式类型转换?
如果值为基本类型,则直接返回值本身;方法,这是 JavaScript 中每个值隐含的自带的方法,用来。以下是基本类型的值在不同操作符的情况下隐式转换的规则 (,所以在进行这些运算前的第一步就是将两边的值用。以上说的是基本类型的隐式转换,而对象会被。首先要介绍ToPrimitive。可以看出两者的主要区别在于调用。转换成基本类型,再进行操作。操作符两边的值都尽量转成。原创 2024-02-14 20:20:13 · 435 阅读 · 0 评论 -
10.什么是 JavaScript 中的包装类型
答案是什么都不会打印,因为虽然包裹的基本类型是。,所以循环体中的内容不会运行。JavaScript也可以。也可以使用valueOf。原创 2024-02-14 20:16:08 · 424 阅读 · 0 评论 -
9.Object.is() 与比较操作符 “===”、“==” 的区别?
使用双等号(==)进行相等判断时,如果两边的类型不一致,则会进行强制类型转化后再进行比较。 使用三等号(===)进行相等判断时,如果两边的类型不一致时,不会做强制类型准换,直接返回 false。 使用 Object.is 来进行相等判断时,一般情况下和三等号的判断相同,它处理了一些特殊的情况,比如 -0 和 +0 不再相等,两个 NaN 是相等的。原创 2024-02-14 20:11:14 · 324 阅读 · 0 评论 -
8.JS中的== 操作符的强制类型转换规则
为了将值转换为相应的基本类型值,抽象操作 ToPrimitive 会首先(通过内部操作 DefaultValue)检查该值是否有valueOf()方法。如果有并且返回基本类型值,就使用该值进行强制类型转换。如果没有就使用 toString() 的返回值(如果存在)来进行强制类型转换。如果 valueOf() 和 toString() 均不返回基本类型值,会产生 TypeError 错误。5.判断其中一方是否为。,假值列表以外的都应该是真值。来说,如果对比双方的类型。转为原始类型再进行判断。原创 2024-02-14 20:09:19 · 480 阅读 · 0 评论 -
7. 如何获取安全的 undefined 值?
因为 undefined 是一个标识符,所以可以被当作变量来使用和赋值,但是这样会影响 undefined 的正常判断。表达式 void ___ 没有返回值,因此返回结果是 undefined。原创 2024-02-14 19:51:58 · 375 阅读 · 0 评论