更新时间:2022-12-27 14:57:29 来源:极悦 浏览941次
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的值指向构造函数的原型对象。在原型对象上添加或修改的属性,在所有实例化出的对象上都可共享。
当在实例化的对象中访问一个属性时,首先会在该对象内部寻找,如找不到,则会向其proto指向的原型中寻找,如仍找不到,则继续向原型中proto指向的上级原型中寻找,直至找到或Object.prototype为止,这种链状过程即为原型链。
以上就是“面试前必看的经典JS常见面试题”,你能回答上来吗?如果想要了解更多的相关内容,可以关注极悦Java官网。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习