专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 职业指南 面试前必看的经典JS常见面试题

面试前必看的经典JS常见面试题

更新时间:2022-12-27 14:57:29 来源:动力节点 浏览767次

1. JS 有哪些数据类型?

根据 JavaScript 中的变量类型传递方式,分为基本数据类型和引用数据类型两大类七种。

基本数据类型包括Undefined、Null、Boolean、Number、String、Symbol (ES6新增)六种。 引用数据类型只有Object一种,主要包括对象、数组和函数。

判断数据类型采用typeof操作符,有两种语法:

typeof 123;//语法一
typeof("123");//语法二
(1)typeof(null)返回object;
(2)null == undefined返回true,因为undefined派生自null;
(3)null === undefined返回false。

2. 基本数据类型和引用数据类型有什么区别?

(1)两者作为函数的参数进行传递时:

基本数据类型传入的是数据的副本,原数据的更改不会影响传入后的数据。

引用数据类型传入的是数据的引用地址,原数据的更改会影响传入后的数据。

(2)两者在内存中的存储位置:

基本数据类型存储在栈中。

引用数据类型在栈中存储了指针,该指针指向的数据实体存储在堆中。

3. 判断数据类型的方法有哪些?

(1)利用typeof可以判断数据的类型;

(2)A instanceof B可以用来判断A是否为B的实例,但它不能检测 null 和 undefined;

(3)B.constructor == A可以判断A是否为B的原型,但constructor检测 Object与instanceof不一样,还可以处理基本数据类型的检测。不过函数的 constructor 是不稳定的,这个主要体现在把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖了,这样检测出来的结果就是不准确的。

(4)Object.prototype.toString.call()。Object.prototype.toString.call() 是最准确最常用的方式。

4. 浅拷贝与深拷贝有何区别?如何实现?

浅拷贝只复制指向某个对象的指针,而不复制对象本身。

浅拷贝的实现方式有:(1)Object.assign():需注意的是目标对象只有一层的时候,是深拷贝; (2)扩展运算符;

深拷贝就是在拷贝数据的时候,将数据的所有引用结构都拷贝一份。

深拷贝的实现方式有: (1)手写遍历递归赋值; (2)结合使用JSON.parse()和0JSON.stringify()方法。

5. var、let、const的区别是什么?

var、let、const都是用于声明变量或函数的关键字。其区别在于:

  var let const
作用域 函数作用域 块级作用域 块级作用域
作用域内声明提升 无(时性死区)
是否可重复声明
是否可重复赋值 否(量)
初始化时是否必需赋值

6. 什么是执行上下文和执行栈?

变量或函数的执行上下文,决定了它们的行为以及可以访问哪些数据。

每个上下文都有一个关联的变量对象,而这个上下文中定义的所有变量和函数都存在于这个对象上(如DOM中全局上下文关联的便是window对象)。

每个函数调用都有自己的上下文。当代码执行流进入函数时,函数的上下文被推到一个执行栈中。

在函数执行完之后,执行栈会弹出该函数上下文,在其上的所有变量和函数都会被销毁,并将控制权返还给之前的执行上下文。 JS的执行流就是通过这个执行栈进行控制的。

7. 什么是作用域和作用域链?

作用域可以理解为一个独立的地盘,可以理解为标识符所能生效的范围。

作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。

ES6中有全局作用域、函数作用域和块级作用域三层概念。

当一个变量在当前块级作用域中未被定义时,会向父级作用域(创建该函数的那个父级作用域)寻找。如果父级仍未找到,就会再一层一层向上寻找,直到找到全局作用域为止。这种一层一层的关系,就是作用域链 。

8. 什么是原型、原型链?

原型:JS声明构造函数(用来实例化对象的函数)时,会在内存中创建一个对应的对象,这个对象就是原函数的原型。构造函数默认有一个prototype属性,prototype的值指向函数的原型。同时原型中也有一个constructor属性,constructor的值指向原函数。

通过构造函数实例化出来的对象,并不具有prototype属性,其默认有一个__proto__属性,proto的值指向构造函数的原型对象。在原型对象上添加或修改的属性,在所有实例化出的对象上都可共享。

js常见面试题

当在实例化的对象中访问一个属性时,首先会在该对象内部寻找,如找不到,则会向其proto指向的原型中寻找,如仍找不到,则继续向原型中proto指向的上级原型中寻找,直至找到或Object.prototype为止,这种链状过程即为原型链。

以上就是“面试前必看的经典JS常见面试题”,你能回答上来吗?如果想要了解更多的Java面试题相关内容,可以关注动力节点Java官网。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>