在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
JavaScript作为前端开发三大要素之一,是前端面试中考察的一大重点。本文为大家对JavaScript常见面试题进行了梳理,大家可以做一做下面的面试题,进行查漏补缺!
面试题1、JavaScript的数据类型有哪些?数据类型如何转换?
JavaScript一共有8种数据类型,其中有7种基本数据类型:Undefined、Null、Boolean、Number、String、Symbo和BigInt。在JS中类型转换只有三种情况,分别是:转换为布尔值,转换为数字以及转换为字符串。此外还有一些操作符会存在隐式转换。
面试题2、介绍一下JavaScript有哪些内置对象。
(1)值属性,这些全局属性返回一个简单值,这些值没有自己的属性和方法。例如 Infinity、NaN、undefined、null 字面量。
(2)函数属性,全局函数可以直接调用,不需要在调用时指定所属对象,执行结束后会将结果直接返回给调用者。例如 eval()、parseFloat()、parseInt() 等。
(3)基本对象,基本对象是定义或使用其他对象的基础。基本对象包括一般对象、函数对象和错误对象。例如 Object、Function、Boolean、Symbol、Error 等。
(4)数字和日期对象,用来表示数字、日期和执行数学计算的对象。例如 Number、Math、Date。
(5)字符串,用来表示和操作字符串的对象。例如 String、RegExp。
(6)可索引的集合对象,这些对象表示按照索引值来排序的数据集合,包括数组和类型数组,以及类数组结构的对象。例如 Array。
(7)使用键的集合对象,这些集合对象在存储数据时会使用到键,支持按照插入顺序来迭代元素。例如 Map、Set、WeakMap、WeakSet。
(8)矢量集合,SIMD 矢量集合中的数据会被组织为一个数据序列。例如 SIMD 等。
(9)结构化数据,这些对象用来表示和操作结构化的缓冲区数据,或使用 JSON 编码的数据。例如 JSON 等。
(10)控制抽象对象。例如 Promise、Generator 等。
(11)反射。例如 Reflect、Proxy。
(12)国际化,为了支持多语言处理而加入 ECMAScript 的对象。例如 Intl、Intl.Collator 等。
(13)WebAssembly。
面试题3、undefined与undeclared的区别是什么?
已在作用域中声明但还没有赋值的变量,是 undefined 的。相反,还没有在作用域中声明过的变量,是 undeclared 的。对于 undeclared 变量的引用,浏览器会报引用错误,如 ReferenceError: b is not defined 。但是我们可以使用 typeof 的安全防范机制来避免报错,因为对于 undeclared(或者 not defined )变量,typeof 会返回 "undefined"。
面试题4、{} 和 [] 的 valueOf 和 toString 的结果是什么?
{} 的 valueOf 结果为 {} ,toString 的结果为 "[object Object]"
[] 的 valueOf 结果为 [] ,toString 的结果为 ""
面试题5、描述一下Javascript 的作用域和作用域链。
(1)作用域: 作用域是定义变量的区域,它有一套访问变量的规则,这套规则来管理浏览器引擎如何在当前作用域以及嵌套的作用域中根据变量(标识符)进行变量查找。
(2)作用域链: 作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,我们可以访问到外层环境的变量和函数。作用域链的本质上是一个指向变量对象的指针列表。变量对象是一个包含了执行环境中所有变量和函数的对象。作用域链的前端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象始终是作用域链的最后一个对象。
面试题6、Javascript创建对象的几种方式?
(1)工厂模式,工厂模式的主要工作原理是用函数来封装创建对象的细节,从而通过调用函数来达到复用的目的。但是它有一个很大的问题就是创建出来的对象无法和某个类型联系起来,它只是简单的封装了复用代码,而没有建立起对象和类型间的关系。
(2)构造函数模式,Javascript中每一个函数都可以作为构造函数,只要一个函数是通过 new 来调用的,那么我们就可以把它称为构造函数。执行构造函数首先会创建一个对象,然后将对象的原型指向构造函数的 prototype 属性,然后将执行上下文中的 this 指向这个对象,最后再执行整个函数,如果返回值不是对象,则返回新建的对象。因为 this 的值指向了新建的对象,因此我们可以使用 this 给对象赋值。
(3)原型模式,因为每一个函数都有一个 prototype 属性,这个属性是一个对象,它包含了通过构造函数创建的所有实例都能共享的属性和方法。因此我们可以使用原型对象来添加公用属性和方法,从而实现代码的复用。这种方式相对于构造函数模式来说,解决了函数对象的复用问题。
(4)组合使用构造函数模式和原型模式,这是创建自定义类型的最常见方式。因为构造函数模式和原型模式分开使用都存在一些问题,因此我们可以组合使用这两种模式,通过构造函数来初始化对象的属性,通过原型对象来实现函数方法的复用。这种方法很好的解决了两种模式单独使用时的缺点,但是有一点不足的就是,因为使用了两种不同的模式,所以对于代码的封装性不够好。
(5)动态原型模式,这一种模式将原型方法赋值的创建过程移动到了构造函数的内部,通过对属性是否存在的判断,可以实现仅在第一次调用函数时对原型对象赋值一次的效果。这一种方式很好地对上面的混合模式进行了封装。
(6)寄生构造函数模式,这一种模式和工厂模式的实现基本相同。它主要是基于一个已有的类型,在实例化时对实例化的对象进行扩展。这样既不用修改原来的构造函数,也达到了扩展对象的目的。它的一个缺点和工厂模式一样,无法实现对象的识别。
面试题7、Javascript延迟加载的方式有哪些?
Javascript的加载、解析和执行会阻塞页面的渲染过程,因此我们希望Javascript脚本能够尽可能的延迟加载,提高页面的渲染速度。
(1)将 js 脚本放在文档的底部,来使 js 脚本尽可能的在最后来加载执行。
(2)给 js 脚本添加 defer属性,这个属性会让脚本的加载与文档的解析同步解析,然后在文档解析完成后再执行这个脚本文件,这样的话就能使页面的渲染不被阻塞。多个设置了 defer 属性的脚本按规范来说最后是顺序执行的,但是在一些浏览器中可能不是这样。
(3)给 js 脚本添加 async属性,这个属性会使脚本异步加载,不会阻塞页面的解析过程,但是当脚本加载完成后立即执行 js脚本,这个时候如果文档没有解析完成的话同样会阻塞。多个 async 属性的脚本的执行顺序是不可预测的,一般不会按照代码的顺序依次执行。
(4)动态创建 DOM 标签的方式,我们可以对文档的加载事件进行监听,当文档加载完成后再动态的创建 script 标签来引入 js 脚本。
以上就是JavaScript常见面试题梳理,大家都会做了吗?
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Web前端程序员必备 前端面试题汇总(1)
任何技术岗位面试的时候都要经过人力面试和技术岗位面试至少两次。人力面试一般也就是考察一下个人品质以及薪资问题,而技术岗位则是考察你是否有真才实学。本文和大家分享一个难到了很多前端工程师的面试题:Quirks模式是什么?它和 Standards 模式有什么区别?
6089
2019-06-27 18:15:42
前端面试题 如何优化DOM操作的性能?
众所周知,在富网页应用中编写脚本时,无可避免地要跟DOM打交道,但是频繁地对于DOM进行操作,又会导致损耗性能,那么如何才能优化这个性能瓶颈呢?其实这也是前端面试的必考题,一般来说有大致七种方式,归纳起来都是从三种角度出发,即访问和修改DOM元素;修改DOM样式;通过DOM事件处理程序来响应用户。下面我们来详细讲解一下优化DOM操作的性能。
4680
2019-09-26 10:14:53
前端关于ES6的面试题汇总含答案
ES6全称是ECMAScript6,它可以帮助JavaScript语言成为企业级开发语言,编写大型且复杂的应用程序。在前端面试中,ES6也是一个经常出现的考点。本文整理汇总了ES6相关的面试题以及对应的参考答案,大家可以在面试前梳理一遍相关知识点,用最好的状态去迎接面试。
9713
2019-11-03 18:04:48
前端模块化相关面试题整理
随着Web2.0时代的到来,使用模块化规范进行管理成为许多人开始考虑的想法。本文为大家整理总结了前端模块化的相关面试题,大家可以借此机会把模块化的相关知识点梳理一遍。了解异步模块加载机制、使用模块化的原模块化的优缺点等等内容。希望本文可以让大家彻底掌握前端模块化的相关面试题!
6944
2020-01-13 09:26:48
2020年Web前端JavaScript面试题整理附答案
很快又要到一年一度的秋招热季,大家都准备好面试了吗?本文为大家整理了2020年最新出炉的Web前端JavaScript面试题,大家可以好好做一做,有什么不懂得地方再看答案,下面一起来查漏补缺吧!
5387
2020-07-31 10:17:38