
前端面试-JavaScript
文章平均质量分 56
自己整理的JavaScript常见面试题
火星飞鸟
学习前端ing...
展开
-
一道代码题看 CommonJS 模块化规范
在模块内部定义的变量,无法在其他模块中所读取。根据CommonJS模块化规范,一个单独的JS文件就是一个模块,每个模块是一个单独的。再次导入相同模块时,并不会再执行了,会直接从内存中取这个。实际上,在第一次导入中,会执行要导入的文件,并在内存中缓存一个对象,其中。,形成循环引用,是否会报错呢?若不报错,运行的结果是怎么样的?导入模块,实际上就是执行一遍要导入的模块,然后将其输出的。,说明若多次引用,实际上导入的模块是同一个对象。模块,并判断两个导入的变量是否为相等。属性,分别是文件中定义的常量。...原创 2022-07-16 00:55:07 · 711 阅读 · 1 评论 -
JavaScript 实现异步任务调度器
1. 题目要求最近遇到了一个 JavaScript 手写代码题,要求实现一个具有并发数量限制的异步任务调度器,可以规定最大同时运行的任务。实现一个Scheduler类,使下面的代码能正确输出。// 延迟函数const sleep = time => new Promise(resolve => setTimeout(resolve, time));// 同时进行的任务最多2个const scheduler = new Scheduler(2);// 添加异步任务// time原创 2022-01-04 14:24:01 · 2388 阅读 · 0 评论 -
JavaScript 常见的5种设计模式
本文是自己学习 JavaScript 设计模式的笔记,整理了 JavaScript 常见的五种设计模式,并总结了相应的案例代码。1. 装饰者模式装饰者模式是指,在不改变对象自身代码的前提下,新增功能的模式。如下代码所示,创建3个飞机对象。plane可以发射普通子弹;plane2不仅可以发射普通子弹,还可以发射导弹;plane3不仅可以发射普通子弹和导弹,还可以发射炮弹。创建构造函数Plane2时,不改变plane的功能,只增加功能,将Plane的实例挂载到自身属性上,并在fire方法下,调用.原创 2021-11-29 12:09:45 · 1759 阅读 · 0 评论 -
JavaScript 理解异步函数、async/await关键字
1. Promise异步函数,即async / await,是基于Promise的应用,可以让我们以同步的方式写异步的代码。如下代码,一个使用Promise的简单例子,Promise对象中的函数参数中,写了一个定时器setTimeout。定时器的第三个参数为10,表示定时器结束后,10将作为参数,传递给定时器的回调函数resolve。这就意味着,定时器结束后,这个Promise对象会解决为数值10。const p = new Promise((resolve, reject) => setTim原创 2021-11-12 23:58:30 · 1684 阅读 · 1 评论 -
JavaScript 关于数组的扩展运算符实现
在 JavaScript 的数组扩展运算符中,可以很轻松地将数组展开,并创建新的数组:const arr = [1,2,3,4,5];const arr0 = [...arr];const arr1 = [1,...arr];const arr2 = [1,...arr,3,4];const arr3 = [1,...arr,...arr];将如上代码复制到babel官网,babel会自动将代码转换成浏览器兼容的 JavaScript 代码,就能看到它如何实现的了:"use strict"原创 2021-11-04 10:23:07 · 566 阅读 · 0 评论 -
JavaScript class和function的区别
在 JavaScript 中,ES6 开始引入class的概念。实际上,JavaScript 中class的本质也是基于原型prototype的实现方式作了进一步的封装,其本质还是函数function。虽说如此,class和function还是有不同之处。1. 相同点:都可作为构造函数1. 函数作为构造函数class和function都可以作为构造函数,通过new操作符来实例化。如下代码,函数作为构造函数的写法。函数作为构造函数,通常首字母要大写。构造函数中的this指向构造函数创建出来的实例对象u原创 2021-11-02 13:19:37 · 4237 阅读 · 0 评论 -
JavaScript ES6中Object的新增方法
在 ES6 中,添加了Object.is()、Object.assign()、Object.keys()、Object.values()、Object.entries()等方法。1. Object.is()Object.is()方法用来判断两个值是否为同一个值。使用语法如下,其中,value1和value2是比较的两个值。Object.is(value1, value2);Object.is()方法返回一个布尔类型的值,若满足以下条件则两个值相等:都是undefined都是null都是t原创 2021-11-01 15:04:11 · 1868 阅读 · 0 评论 -
JavaScript forEach、for-in和for-of的区别总结
for-infor...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。for (variable in object){ ...}variable:在每次迭代时,variable会被赋值为不同的key,即属性名。object:非Symbol类型的可枚举属性被迭代的对象。for ... in更适合遍历对象,不建议与数组一起使用,因为遍历顺序有可能不是按照实际数组的索引顺序。for ... in会遍历所有的可枚举属性,包括原型:const obj = { a: 1, b原创 2021-07-19 16:10:22 · 357 阅读 · 1 评论 -
JavaScript DOM事件流
事件流描述的是从页面中接收事件的顺序。事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM 事件流。DOM 事件流分为3个阶段:捕获阶段从根元素HTML到事件源。某个元素的某类型事件被触发,先触发根元素,再向子一级,直到事件源。当前目标阶段冒泡阶段从事件源向父级,一直到根元素HTML。某个元素的某类型事件被触发,父元素同类型事件也会被触发。注意:JS 代码中只能执行捕获或者冒泡其中的一个阶段。onclick和attachEvent只能得到冒泡原创 2021-06-29 17:01:51 · 259 阅读 · 0 评论 -
escape、encodeURI和encodeURIComponent的区别
1. escape对字符串编码。ASCII 字母、数字、@ * / + - _ . 之外的字符都能被编码。2. encodeURI对URL编码。ASCII 字母、数字、@ * / + 和 ~ ! # $ & () =, ; ?- _ . '之外的字符都能被编码。3. encodeURIComponent对URL编码ASCII 字母、数字、 ~ ! * ( ) - _ . ’ 之外的字符都能被编码。...原创 2021-06-29 16:47:51 · 251 阅读 · 0 评论 -
JavaScript 数据类型转换详解
1. 内置类型JavaScript中有7中内置类型,分为基本类型和引用类型。(1)基本类型nullundefinedbooleannumberstringsymbol其中NaN属于number,但是NaN !== NaN。基本类型的变量和值都保存在栈内存中。(2)引用类型object函数、对象、数组,都属于object。引用类型,变量保存在栈内存中,值保存在堆内存中,通过指针来指向堆内存中对应的值。2. 类型判断 typeof(1)基本类型除了null显示objec原创 2021-06-24 20:04:17 · 372 阅读 · 1 评论 -
【React组件分类】React有哪些类型的组件?
无状态组件更适合函数组件负责展示无状态,复用度高有状态组件函数组件 + hooks或类组件useState或声明stateuseEffect或使用生命周期容器组件子组件状态提升到此,统一管理异步操作,如数据请求等提高子组件的复用度高阶组件接收组件,返回组件为原有组件增加新功能和行为代替mixins,避免状态污染回调组件高阶组件的另一种形式将组件本身,通过props.children或prop属性传递给子组件适合不能确定或不关心传给子组件数据的场景,如路由,加载组件的实.原创 2021-06-21 16:11:09 · 813 阅读 · 0 评论 -
JavaScript 中 == 和 === 到底有什么区别?
==如果被比较的两个数据类型不一致,则会自动进行类型转换后再比较。X == Y:判断两者类型是否相同。若相同,则比较值是否相等。若类型不相等,先进行类型转换。首先判断是否为null == undefined,若是,则返回true。判断是否为string === number,若是,将string转化为number后再判断两者值是否相等。'123' => 123判断是否出现boolean,若出现boolean,将boolean转化为number后再进行判断。tr原创 2021-06-05 20:47:56 · 306 阅读 · 1 评论 -
JavaScript经典面试题 —— 解决循环打印问题
循环输出问题是面试中经典的题目,一般会给出代码,让我们解释原因,并给出若干解决方案。1. 题目分析以下代码运行后会打印什么?答案:6 6 6 6 6for (var i = 1; i <= 5; i++) { setTimeout(function () { console.log(i); }, 0);}虽然每个for循环中定时器设置的时间都是0,但由于JavaScript是单线程 eventLoop机制,setTimeout是异步任务,遇到set.原创 2021-06-07 08:53:51 · 1290 阅读 · 1 评论 -
前端面试题——[‘1‘, ‘2‘, ‘3‘].map(parseInt)的结果?
['1', '2', '3'].map(parseInt)的结果?第一结果应该是[ 1, 2, 3 ],但答案却是[ 1, NaN, NaN ]:['1', '2', '3'].map(parseInt);// [ 1, NaN, NaN ]这是因为map()方法创建一个新数组,该数组中的每个元素都调用一个提供的函数后返回的结果。parseInt()方法接收2个参数,第一个参数为要被解析的字符串,第二个参数表示要解析的数字的基数,可选。map()有3个参数,分别是当前元素,索引,数组本身,因为原创 2021-06-17 12:43:55 · 692 阅读 · 0 评论