前端八股文--JS篇

# JavaScript 知识大纲

# 一、数据类型

# 1.1 JavaScript 有哪些数据类型,它们的区别?

# 1.2 数据类型检测的方式有哪些?

# 1.3 判断数组的方式有哪些?

# 1.4 null 和 undefined 区别?

# 1.5 instanceof 操作符的实现原理及实现?

# 1.6 为什么 0.1 + 0.2!== 0.3,如何让其相等?

# 1.7 == 操作符的强制类型转换规则?

# 1.8 Object.is () 与比较操作符 “===”、“==” 的区别?

# 1.9 object.assign 和扩展运算法是深拷贝还是浅拷贝,两者区别?

# 1.10 typeof null 的结果是什么,为什么?

# 1.11 isNaN 和 Number.isNaN 函数的区别?

# 1.12 其他值到字符串的转换规则?

# 1.13 其他值到数字值的转换规则?

# 1.14 其他值到布尔类型的值的转换规则?

# 1.15 JavaScript 中如何进行隐式类型转换?

# 1.16 如何获取安全的 undefined 值?

# 1.17 typeof NaN 的结果是什么?

# 1.18 || 和 && 操作符的返回值?

# 1.19 + 操作符什么时候用于字符串的拼接?

# 1.20 什么是 JavaScript 中的包装类型?

# 1.21 为什么会有 BigInt 的提案?

# 二、ES6

# 2.1 let、const、var 的区别?

# 2.2 箭头函数与普通函数的区别?

# 2.3 const 对象的属性可以修改吗?

# 2.4 如果 new 一个箭头函数会怎么样?

# 2.5 箭头函数的 this 指向哪里?

# 2.6 对 rest 参数的理解?

# 2.7 ES6 中模板语法与字符串处理?

# 2.8 扩展运算符的作用及使用场景?

# 2.9 Proxy 可以实现什么功能?

# 2.10 对对象与数组的解构的理解?

# 2.11 如何提取高度嵌套的对象里的指定属性?

# 三、JavaScript 基础

# 3.1 new 操作符的实现原理?

# 3.2 数组有哪些原生方法?

# 3.3 什么是 DOM 和 BOM?

# 3.4 对类数组对象的理解,如何转化为数组?

# 3.5 对 AJAX 的理解,实现一个 AJAX 请求?

# 3.6 JavaScript 为什么要进行变量提升,它导致了什么问题?

# 3.7 forEach 和 map 方法有什么区别?

# 3.8 map 和 Object 的区别?

# 3.9 JavaScript 脚本延迟加载的方式有哪些?

# 3.10 JavaScript 类数组对象的定义?

# 3.11 为什么函数的 arguments 参数是类数组而不是数组?如何遍历类数组?

# 3.12 ES6 模块与 CommonJS 模块有什么异同?

# 3.13 如何判断一个对象是否属于某个类?

# 3.14 for...in 和 for...of 的区别?

# 3.15 数组的遍历方法有哪些?

# 3.16 map 和 weakMap 的区别?

# 3.17 常用的正则表达式有哪些?

# 3.18 对 JSON 的理解?

# 3.19 Unicode、UTF-8、UTF-16、UTF-32 的区别?

# 3.20 常见的位运算符有哪些?其计算规则是什么?

# 3.21 escape、encodeURI、encodeURIComponent 的区别?

# 3.22 什么是尾调用,使用尾调用有什么好处?

# 3.23 常见的 DOM 操作有哪些?

# 3.24 use strict 是什么意思?使用它区别是什么?

# 3.25 如何使用 for...of 遍历对象?

# 3.26 ajax、axios、fetch 的区别?

# 3.27 JavaScript 有哪些内置对象?

# 3.28 强类型语言和弱类型语言的区别?

# 3.29 解释性语言和编译型语言的区别?

# 四、原型与原型链

# 4.1 对原型、原型链的理解?

# 4.2 原型链指向?

# 4.3 原型修改、重写?

# 4.4 原型链的终点是什么?如何打印出原型链的终点?

# 4.5 如何获得对象非原型链上的属性?

# 五、执行上下文 / 作用域链 / 闭包

# 5.1 对闭包的理解?

# 5.2 对作用域、作用域链的理解?

# 5.3 对执行上下文的理解?

# 六、this/call/apply/bind

# 6.1 对 this 对象的理解?

# 6.2 call () 和 apply () 的区别?

# 6.3 实现 call、apply 及 bind 函数?

# 七、异步编程

# 7.1 对 Promise 的理解?

# 7.2 Promise 的基本用法?

# 7.3 对 async/await 的理解?

# 7.4 async/await 对比 Promise 的优势?

# 7.5 异步编程的实现方式?

# 7.6 setTimeout、Promise、Async/Await 的区别?

# 7.7 Promise 解决了什么问题?

# 7.8 Promise.all 和 Promise.race 的区别及使用场景?

# 7.9 await 到底在等啥?

# 7.10 async/await 的优势?

# 7.11 async/await 如何捕获异常?

# 7.12 并发与并行的区别?

# 7.13 什么是回调函数?回调函数有什么缺点?如何解决回调地狱问题?

# 7.14 setTimeout、setInterval、requestAnimationFrame 各有什么特点?

# 八、面向对象

# 8.1 对象创建的方式有哪些?

# 8.2 对象继承的方式有哪些?

# 九、垃圾回收与内存泄漏

# 9.1 浏览器的垃圾回收机制?

# 9.2 哪些情况会导致内存泄漏?