
js面试题
文章平均质量分 69
深入了解关于前端js的一些面试题
纵有千堆雪与长街
你好
展开
-
【JavaScript面试】script标签defer和async的区别
为了解决这个问题就出现了简单的来说,使用这两个属性会有三种可能的情况如果async为true,那么脚本在下载完成后异步执行。如果async为false,defer为true,那么脚本会在页面解析完毕之后执行。如果async和defer都为false,那么脚本会在页面解析中,停止页面解析,立刻下载并且执行。转载 2022-11-02 14:54:26 · 221 阅读 · 1 评论 -
【JavaScript面试】用const声明的常量,能不能被修改?
但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。引用数据类型的变量存储在 ‘栈内存’ 中,值存储在 ‘堆内存’ 中,通过指针来指向 ‘堆内存’ 中对应的 值,所以,const定义的 引用数据类型,不可被改变的是 ‘指针’ , 所以可以通过 属性来修改值。const声明只是固定了obj的值,但是值(该对象)里面的内容没有被固定。原创 2022-10-31 22:51:39 · 840 阅读 · 0 评论 -
深拷贝的实现方法和注意事项
上段代码解决了我们循环引用的问题,主要利用了WeakMap()这个方法,它的作用其实主要就是创建一个缓存表,我们深拷贝时,会先判断该属性值是否在缓存表当中,存在则说明是循环引用。Object.assign()是一种比较简单的深拷贝方法,其实说它是深拷贝,一点都不严谨,因为它只会拷贝第一层,也就是当对象内嵌套有对象的时候,被嵌套的对象进行的还是浅拷贝。深拷贝:深拷贝是指,拷贝对象的具体内容,二内存地址是自主分配的,拷贝结束之后俩个对象虽然存的值是一样的,但是内存地址不一样,俩个对象页互相不影响,互不干涉。转载 2022-10-26 21:41:17 · 821 阅读 · 0 评论 -
【什么是 Nodejs ?】
V8 引擎借鉴了 Java 虚拟机和 C++ 编译器的众多技术,它将 JavaScript 代码直接编译成原生机器码,并且使用了缓存机制来提高性能,这使得 JavaScript 的运行速度可以媲美二进制程序。Node.js 是一个 JavaScript 运行时,它让 JavaScript 脱离了浏览器环境,可以直接在计算机上运行,极大地拓展了 JavaScript 用途。我们应该将 JavaScript 和 Python、Java、Ruby 等其它编程语言同等对待,不能再将它视为一种“小玩意”。原创 2022-10-26 17:36:36 · 679 阅读 · 0 评论 -
【JavaScript面试】字符串
基本类型包括:布尔,数值,字符串,undefined,null,Symbol引用类型:Object。原创 2022-10-22 23:18:12 · 264 阅读 · 0 评论 -
【JavaScript面试】小问题合集
JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。0.1 + 0.2 不等于0.3 ,因为浮点数表示小数的时候有精度损失。原创 2022-10-22 23:10:07 · 196 阅读 · 0 评论 -
【前端笔试】知识点总结3
以下哪种操作对网页的SEO是没有帮助。D 使用语义化的HIML标签。行内元素和块级元素的区别?A 合理安排重要内容的位置。原创 2022-10-22 23:07:53 · 355 阅读 · 0 评论 -
【JavaScript面试】使用setTimeout实现setInterval
setInterval 的作用是每隔一段指定时间执行一个函数,但是这个执行不是真的到了时间立即执行,它真正的作用是每隔一段时间将事件加入事件队列中去,只有当当前的执行栈为空的时候,才能去从事件队列中取出事件执行。所以可能会出现这样的情况,就是当前执行栈执行的时间很长,导致事件队列里边积累多个定时器加入的事件,当执行栈结束的时候,这些事件会依次执行,因此就不能到间隔一段时间执行的效果。2、函数操作耗时过长会导致不准确:假如定时器里面的代码需要进行大量的计算(耗费时间较长),或者是 DOM 操作。原创 2022-10-17 20:30:14 · 748 阅读 · 0 评论 -
【JavaScript面试】面向过程与面向对象
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。面向对象编程具有灵活、代码可复用、容易维护和开发的优点,更适合多人合作的大型软件项目。用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。面向对象是把事务分解成为一个个对象 ,然后由对象之间分工与合作。在面向对象程序开发思想中,每一个对象都是功能中心,具有明确分工。面向过程,就是按照我们分析好了的步骤,按照步骤解决问题。面向对象是以对象功能来划分问题,而不是步骤。原创 2022-09-30 16:27:51 · 455 阅读 · 0 评论 -
【JavaScript面试】网页轮播图的制作
当我们点击上面图片的右侧按钮的时候,页面里面的图片会实现滚动效果。③图片无缝滚动原理.(把ul第一个小li复制一份,放到ul的最后面,当我们图片滚动到克隆的最后一张时,让ul快速的,不做动画的跳到最左侧:left为0。但是结果并没有浮起来,原因是盒子的宽度不够,ul已经超出了父亲的宽度,此时我们可以吧我们的ul的宽度设置的更宽,只要ul足够宽,我们就可以把几个小li放到一行上去。⑥此时需要知道小圆圈的索引号,我们可以在生成小圆圈的时候, 给它设置一个自定义属性, 点击的时候获取这个自定义属性即可.原创 2022-09-30 15:42:43 · 1913 阅读 · 0 评论 -
【JavaScript总结】双等与三等
JavaScript的规定,NaN表示的是非数字, 但是这个非数字也是不同的,因此,NaN 不等于 NaN,并且两个NaN永远不可能相等。undefined == null返回的值是true,null 和 undefined都代表着无效的值。它接受两个参数,这两个参数是要比较的值,并返回一个布尔值,指示两个参数是否相同。=”运算符将数字值“+0”和“-0”视为相等,而Object.is()方法则将它们视为不等于。这个是因为他们都是对象,开辟了新的内存空间,地址也不相同,所以双等和三等都不等。原创 2022-09-30 09:19:57 · 689 阅读 · 0 评论 -
【JavaScript总结】之数组
splice() 的主要用途是向数组的中部插入项,而split()方法可以基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中。将数组[2, 0, 6, 1, 77, 0, 52, 0, 25, 7]中的 0 去掉后,形成一个不包含 0 的新数组。核心算法:我们遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素在新数组里面没有出现过,我们就添加,否则不添加。splice:splice(start,length,item)删,增,替换数组元素,返回被删除数组,无删除则不返回。原创 2022-09-29 23:11:12 · 815 阅读 · 0 评论 -
【JavaScript总结】js基础知识点
JS 引擎执行代码时逐行解释每一句源码(转换为机器语言),然后由计算机去执行,所以 JavaScript 语言归为脚本语言,会逐行解释执行。答案都是true,原因是1原创 2022-09-29 17:13:39 · 408 阅读 · 0 评论 -
【JavaScript面试】简单数据类型与复杂数据类型传参
简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型。值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型。原创 2022-09-26 15:27:13 · 181 阅读 · 0 评论 -
浏览器如何渲染页面?
第一步构建DOM,第二步构建CSSOM,第三步构建渲染树,第四步布局,第五步绘制。如果构建DOM的时候遇到了JS,就请求下载执行JS。JS如果没有额外的设置,默认要等CSSOM构建完成。而JS既可以对DOM,也可以对CSSOM进行修改,这样后面的三步又会再运行一次。原创 2022-09-21 16:40:52 · 1697 阅读 · 0 评论 -
【神策数据面试】手撕题
例如 sensorsdata@cn 翻转后变为nc@atadsrosnes//TODO}原创 2022-09-20 22:04:09 · 957 阅读 · 0 评论 -
【JavaScript面试】函数的length属性
Function 构造器本身也是个Function。它的 length 属性值为 1。该属性 Writable: false, Enumerable: false, Configurable: true。相信大家对数组里的length属性应该不陌生,它表示数组元素的个数,但是你有没有留意过,function里也有一个length属性。如果函数内部是通过arguments调用参数,而没有实际定义参数的话,length 只会的得到 0。我们先来看一下它的定义。原创 2022-09-20 17:40:07 · 316 阅读 · 0 评论 -
【JavaScript面试】forEach,for in,for of循环的用法
for…of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象.与forEach()不同的是,它可以正确响应break、continue和return语句。for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法。for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。原创 2022-09-09 15:12:26 · 440 阅读 · 0 评论 -
【JavaScript面试】map()方法
会出现undefined,是因为map()方法创建了一个新数组,但新数组并不是在遍历完array1后才被赋值的,而是每遍历一次就得到一个值。map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。map是数组的方法,有一个参数,参数是一个函数,函数中有3个参数。注意:函数的作用是对数组中的每一个元素进行处理,返回新的元素。参数2:index,可选。当前元素在数组中的索引值。注意: map() 不会对空数组进行检测。注意: map() 不会改变原始数组。原创 2022-09-09 10:38:56 · 349 阅读 · 0 评论 -
【JavaScript面试】isArray() 、Array.of()、Array.from() 方法
isArray() 方法用于判断一个对象是否为数组。如果对象是数组返回 true,否则返回 false。原创 2022-09-08 17:58:23 · 3019 阅读 · 0 评论 -
【JavaScript面试】Map和Set方法
会出现undefined,是因为map()方法创建了一个新数组,但新数组并不是在遍历完array1后才被赋值的,而是每遍历一次就得到一个值。map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。map是数组的方法,有一个参数,参数是一个函数,函数中有3个参数。注意:函数的作用是对数组中的每一个元素进行处理,返回新的元素。参数2:index,可选。当前元素在数组中的索引值。注意: map() 不会对空数组进行检测。注意: map() 不会改变原始数组。原创 2022-09-08 15:41:47 · 698 阅读 · 0 评论 -
【JavaScript面试】join()方法
1、join针对数组对象2、参数是一个字符串,参数的默认值是 ‘,’ ,传空值或者undefined都会触发默认值3、返回值是所有数组元素和分隔符的组合,是一个字符串。原创 2022-09-08 10:27:40 · 629 阅读 · 0 评论 -
【JavaScript面试】解构赋值
关于解构赋值的一些使用。转载 2022-09-02 21:36:55 · 263 阅读 · 0 评论 -
【JavaScript面试】数组的forEach()方法总结
forEach 其实是一个迭代器,他与 for 循环本质上的区别是 forEach 是负责遍历(Array Set Map)可迭代对象的,而 for 循环是一种循环机制,只是能通过它遍历出数组。forEach不能使用break和continue这两个关键字,本身无法跳出循环,也不能像普通for循环一样使用return跳出,必须遍历所有的数据才能结束。forEach是ES5提出的,挂载在可迭代对象原型上的方法,例如Array Set Map。forEach是一个迭代器,负责遍历可迭代对象。原创 2022-09-02 19:12:43 · 2057 阅读 · 0 评论 -
【JavaScript】关于闭包
全局作用域:全局作用域为程序的最外层作用域,一直存在。函数作用域:函数作用域只有函数被定义时才会创建,包含在父级函数作用域 / 全局作用域内。当函数被执行时,总是先从函数内部找寻局部变量,如果找不到相应的变量,则会向创建函数的上级作用域寻找,直到找到全局作用域为止,这个过程被称为作用域链。闭包的本质是利用了作用域的机制,来达到外部作用域访问内部作用域的目的。...原创 2022-08-29 21:59:10 · 587 阅读 · 0 评论 -
module.exports 和exports的区别是什么?
exports 对象是 module 对象的一个属性,在初始时 module.exports 和 exports 指向同一块内存区域模块导出的是 module.exports , exports 只是对它的引用,在不改变exports 内存的情况下,修改exports 的值可以改变 module.exports 的值导出时尽量使用 module.exports ,以免因为各种赋值导致的混乱。转载 2022-08-23 23:12:21 · 343 阅读 · 0 评论 -
【JavaScript面试题】关于数组的那些事
数组是 js 中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响。转载 2022-08-23 21:31:05 · 505 阅读 · 0 评论 -
【JavaScript面试题】new操作符具体做了什么?
创建了一个空对象将空对象的原型,指向于构造函数的原型将空对象作为构造函数的上下文(改变this的指向)对构造函数有返回值的处理判断。原创 2022-08-22 09:35:40 · 556 阅读 · 0 评论 -
【JavaScript面试题】bind和call、apply有什么作用?它们的区别是什么?
调用 call 的对象,必须是个函数 Function。call 的第一个参数,是一个对象。Function 的调用者,将会指向这个对象。如果不传,则默认为全局对象 window。第二个参数开始,可以接收任意个参数。每个参数会映射到相应位置的 Function 的参数上。但是如果将所有的参数作为数组传入,它们会作为一个整体映射到 Function 对应的第一个参数上,之后参数都为空。原创 2022-08-20 23:47:11 · 604 阅读 · 0 评论 -
【深拷贝和浅拷贝】
深拷贝递归地复制新对象中的所有值或属性,而拷贝只复制引用。在深拷贝中,新对象中的更改不会影响原始对象,而在浅拷贝中,新对象中的更改,原始对象中也会跟着改。在深拷贝中,原始对象不与新对象共享相同的属性,而在浅拷贝中,它们具有相同的属性。...原创 2022-08-14 21:43:10 · 998 阅读 · 0 评论 -
【暂时性死区(TDZ)】
造成该错误的主要原因是:ES6新增的let、const关键字声明的变量会产生块级作用域,如果变量在当前作用域中被创建之前就使用该变量,由于此时还未完成语法绑定,如果我们访问或使用该变量,就会产生暂时性死区的问题,由此我们可以得知,从变量的创建到语法绑定之间这一段空间,我们就可以理解为‘暂时性死区’只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。在代码块内,使用let命令声明变量之前,该变量都是不可用的。但同样的代码,用let的话。...原创 2022-08-14 21:25:07 · 187 阅读 · 0 评论 -
【JSON和JS对象的区别】
区别JSONJavaScript对象含义仅仅是一种数据格式表示类的实例传输可以跨平台数据传输不能传输变现键值对方式,键必须加双引号,值不能是方法函数,不能是undefined/NAN键值对方式,键不加引号,值可以是函数、对象、字符串、数字、boolean 等。...原创 2022-08-14 21:06:07 · 884 阅读 · 0 评论 -
【浏览器的回流与重绘 (Reflow & Repaint)】
当页面中元素样式的改变并不影响它在文档流中的位置时(例如color、background-color、visibility等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。当RenderTree中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。4、当你Resize窗口的时候(移动端没有这个问题,因为移动端的缩放没有影响布局视口)1、当你增加、删除、修改DOM结点时,会导致Reflow,Repaint。5、当你修改网页的默认字体时。...转载 2022-07-28 20:33:34 · 621 阅读 · 0 评论 -
【JavaScript面试题】垃圾回收机制
GC即GarbageCollection,程序工作过程中会产生很多垃圾,这些垃圾是程序不用的内存或者是之前用过了,以后不会再用的内存空间,而GC就是负责回收垃圾的。转载 2022-07-28 15:25:00 · 507 阅读 · 0 评论 -
【JavaScript面试】原型和原型链
解释函数.prototype,它本质上是和varobj={}是一样的,由newObject创造的(在js中一切皆对象,它本质上就是一个空对象,空对象都是由newObject创造的即每个函数都有一个prototype属性,它默认指向一个Object空对象前面我们说谁创建了它,那这个对象的隐式原型就指向了创建它的函数的一个显示原型)最终结论每个函数下其实有个prototype属性,prototype的属性值是一个对象,这个对象默认的只有一个叫做constructor的属性,指向这个函数本身。..........转载 2022-07-24 21:27:01 · 1129 阅读 · 0 评论 -
JS中如何阻止默认行为和冒泡事件
此时我们点击子元素会触发父元素,但我们此时不想要这个事件冒泡,我们只想要点击谁就触发谁,这时我们给子元素添加阻止冒泡事件。超链接的默认行为是点击百度跳转就会跳转到百度搜索页面,现在我们不想要这个默认的跳转事件。综上阻止默认事件,一共有3种方式。...原创 2022-07-26 23:05:01 · 507 阅读 · 0 评论 -
【JavaScript面试题】内存泄漏问题
不再用到的内存,没有及时释放,就叫做。转载 2022-07-28 19:37:44 · 196 阅读 · 0 评论 -
【JavaScript面试】箭头函数和普通函数的区别
举个栗子。转载 2022-07-25 15:32:25 · 160 阅读 · 0 评论 -
浅析 JavaScript 中的事件委托
但是如果我们的页面文字特别多,每个元素都绑定事件的话,那我们需要绑定很多事件,那可能在效率,性能上都有很大的问题。并且如果我们新加进来元素仍然是没有办法删除的,此时我们可以利用事件委托实现这个功能。它是我们事件捕获阶段最小的元素,虽然我们是给big绑定的事件,但是我点small,target就是small,点center就是center。此时,将子级的事件委托给父级来处理,大大简化了代码还实现了同一个功能。此时我们的需求是点击哪个水果就删除哪个。此时点击small,会输出哪个顺序?...转载 2022-07-26 22:14:39 · 113 阅读 · 0 评论 -
【JavaScript面试】如何判断变量为对象或数组?
判断简单数据类型可以用typeof,判断数组,对象使用instanceof,constructor和Object.prototype.toString.call(),最好使用Object.prototype.toString.call(),更加精准https。原创 2022-07-24 23:07:47 · 884 阅读 · 0 评论