1. JavaScript 基本数据类型和检测方式
JavaScript 有几种基本数据类型,包括 Number
, String
, Boolean
, Null
, Undefined
, Symbol
和 BigInt
。
- 数据类型检测:
- 使用
typeof
运算符可以检测大部分数据类型,但对于null
和数组等会有特殊情况。 - 使用
instanceof
可以检测对象的构造函数。 - 使用
Array.isArray()
检测数组类型.
- 使用
2. this 的理解
this
是 JavaScript 中的一个关键字,指向函数执行时的上下文。它的值取决于函数的调用方式。
- 全局环境:
- 在浏览器环境中,
this
指向window
对象。 - 在 Node.js 环境中,
this
指向global
对象。
- 在浏览器环境中,
- 函数调用:
- 箭头函数中的
this
继承自外层作用域。 - 普通函数中的
this
取决于调用方式(直接调用、作为方法调用、通过call
、apply
或bind
调用).
- 箭头函数中的
3. let、const 和 var 的区别
ES6 引入了 let
和 const
来替代部分 var
的使用。
- 作用域:
var
有函数作用域和全局作用域。let
和const
有块级作用域。
- 重复声明:
var
可以重复声明同一个变量。let
和const
不允许在同一作用域内重复声明同一个变量。
- 赋值:
const
声明的变量必须在声明时赋值,并且不能再次赋值.
4. 数组的原生方法
了解数组的原生方法可以帮助你更高效地操作数组。
- 遍历方法:
forEach()
map()
filter()
reduce()
- 操作方法:
push()
,pop()
,shift()
,unshift()
splice()
,slice()
concat()
.
5. for...in 和 for...of 的区别
这两个循环语句用于遍历对象和数组,但它们有不同的行为。
- for...in:
- 遍历对象的所有可枚举属性(包括继承的属性)。
- for...of:
- 遍历数组或类数组对象中的元素,或者是实现了迭代器协议的对象.
6. 事件循环(Event Loop)
理解 JavaScript 的单线程特性和事件循环机制,对于处理异步操作非常重要。
- 单线程:
- JavaScript 是单线程语言,但通过事件循环可以处理异步任务。
- 事件循环:
- 事件循环负责处理任务队列中的任务,包括宏任务(如 setTimeout)和微任务(如 Promise).
- 事件循环优先级:
- 微任务(Promise) > 宏任务(setTimeout) >
requestAnimationFrame
- 微任务(Promise) > 宏任务(setTimeout) >
7. ES6+ 新特性
熟悉一些重要的 ES6+ 新特性,可以让你的代码更现代化和高效。
- 箭头函数:
- 简化函数定义,继承外层作用域的
this
。
- 简化函数定义,继承外层作用域的
- 模板字符串:
- 使用反引号(``)定义字符串,支持多行和内嵌表达式。
- Promise 和 async/await:
- 简化异步代码的写法,提高代码的可读性.