tk挠痒痒网址发布页-秘密武器
历史搜索

JS面试题总结(持续更新)

游客2025-05-16 07:40:01
目录文章目录
  1. 1.JS 有哪些数据类型?
  2. 2. 基本数据类型和引用数据类型有什么区别?
  3. 3. 判断数据类型的方法有哪些?
  4. 4. 与深拷贝有何区别?如何实现?
  5. 5. let、const 的区别是什么?
  6. 6. 什么是执行上下文和执行栈?
  7. 7. 什么是作用域和作用域链?
  8. 8. 作用域和执行上下文的区别是什么?
  9. 9. this 指向的各种情况都有什么?
  10. 10.如何改变 this 指针的指向?
  11. 11.什么是闭包?
  12. 12. 什么是原型、原型链?
  13. 13. 何为防抖和节流?如何实现?
  14. 14. 如何理解同步和异步?
  15. 15. JS 是如何实现异步的?
  16. 16. 什么是 AJAX?如何实现?
  17. 17. 实现异步的方式有哪些?
  18. 18. 如何理解 Promise 对象?
  19. 19.如何理解宏任务,微任务?
  20. 20. 什么是跨域?如何解决跨域问题?
  21. 21. 实现继承的方法有哪些?
  22. 22. DOM 事件模型和事件流?
  23. 23. EventLoop 事件循环是什么?
  24. 24. require/import 之间的区别?

1.JS 有哪些数据类型?

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

基本数据类型包括UndefinedNullBooleanNumberStringSymbol(ES6 新增)六种。

引用数据类型只有Object一种,主要包括对象、数组和函数。

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

typeof 123;//语法一

const FG = 123;
typeof FG;//语法二

typeof(null) //返回 object;
null == undefined //返回 true,因为 undefined 派生自 null;
null === undefined //返回 false。

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

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

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

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

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

基本数据类型存储在栈中

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

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

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

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

(3) B.constructor == A可以判断 A 是否为 B 的原型,但constructor检测Objectinstanceof不一样,还可以处理基本数据类型的检测。

不过函数的 constructor 是不稳定的,这个主要体现在把类的原型进行重写,在重写的过程中很有可能出现把之前的 constructor 给覆盖了,这样检测出来的结果就是不准确的。

(4) Object.prototype.toString.call()

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

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

浅拷贝只复制指向某个对象的指针,而不复制对象本身。浅拷贝的实现方式有:

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

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

(1) 手写遍历递归赋值;
(2)结合使用JSON.parse()JSON.stringify()方法。

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

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

JS面试题总结(持续更新) 1

DOM 事件流包括三个阶段事件捕获阶段、处于目标阶段、事件冒泡阶段。

23. EventLoop 事件循环是什么?

js 是一门单线程的需要,它的异步操作都是通过事件循环来完成的。整个事件循环大体由执行栈、消息队列和微任务队列三个部分组成。

同步代码会直接在执行栈中调用执行。

定时器中的回调会在执行栈被清空且定时达成时推入执行栈中执行。

promiseasync异步函数的回调会被推入到微任务队列中,当执行栈被清空且异步操作完成时立即执行。

24. require/import 之间的区别?

  • require是 CommonJS 语法,import是 ES6 语法;
  • require只在后端服务器支持,import在高版本浏览器及 Node 中都可以支持;
  • require引入的是原始导出值的复制,import则是导出值的引用;
  • require时运行时动态加载,import是静态编译;
  • require调用时默认不是严格模式,import则默认调用严格模式.
标签:apply()

本文是由用户"游客"发布,所有内容的版权归原作者所有。没有经过书面许可,任何单位或个人不得以任何形式复制、转载、引用本网站的内容。否则将追究法律责任。

相关专题