Skip to content

基础知识

变量声明

  1. var 声明变量,变量提升,可以重复声明,不使用var声明变量,默认为全局变量
  2. let 声明变量,块级作用域,不可以重复声明,不使用let声明变量,默认为全局变量
  3. const 声明常量,块级作用域,不可以重复声明,不使用const声明变量,默认为全局变量
  4. let 和 const 声明的变量,在声明之前使用,会报错,var 声明的变量,在声明之前使用,会输出undefined

数据类型

  1. 基本数据类型:number、string、boolean、undefined、null、symbol、bigint
  2. 引用数据类型:object、array、function

类型转换

  1. 转换为字符串:toString()、String()、+、模板字符串
  2. 转换为数字:parseInt()、parseFloat()、Number()、一元运算符+、一元运算符-
  3. 转换为布尔值:Boolean()、!!、条件判断

类型判断

  1. typeof:可以判断基本数据类型,不能判断引用数据类型,不能判断null,返回object
  2. instanceof:可以判断引用数据类型,不能判断基本数据类型,不能判断null,返回boolean
  3. constructor:可以判断基本数据类型,不能判断引用数据类型,不能判断null,返回boolean
  4. Object.prototype.toString.call():可以判断基本数据类型,不能判断引用数据类型,不能判断null,返回"[object Type]"
  5. null 和 undefined 的区别:null 表示一个空对象,undefined 表示一个未定义的值
  6. typeof null 的结果为什么是"object":这是一个历史遗留问题,因为在 JavaScript 的最初版本中,所有的对象都是通过指针来引用的,而 null 表示一个空指针,所以 typeof null 的结果是"object"

闭包

  1. 闭包是指有权访问另一个函数作用域中的变量的函数
  2. 闭包的作用:可以访问函数外部的变量,可以保存函数外部的变量,可以避免全局变量的污染
  3. 闭包的缺点:可能会导致内存泄漏,因为闭包会一直保存函数外部的变量,直到闭包被销毁
  4. 闭包的例子:函数作为参数传递,函数作为返回值

原型链

  1. 原型链是指对象的原型指向另一个对象的原型,直到指向null为止
  2. 原型链的作用:可以继承另一个对象的方法和属性
  3. 原型链的例子:每个对象都有一个原型对象,原型对象也有自己的原型对象,直到指向null为止

继承

  1. 继承是指一个对象继承另一个对象的方法和属性
  2. 继承的方式:原型链继承、构造函数继承、组合继承、寄生继承、寄生组合继承、类继承
  3. 继承的缺点:原型链继承会导致原型对象的属性被所有实例共享,构造函数继承会导致实例无法继承原型对象的属性,组合继承会导致每次实例化都会调用两次父类构造函数,寄生继承会导致无法正确继承父类原型链上的属性和方法,寄生组合继承会导致每次实例化都会调用两次父类构造函数,类继承会导致无法正确继承父类原型链上的属性和方法

事件循环

  1. 事件循环是指浏览器或Node.js在执行代码时,会先将同步代码执行完毕,然后再执行异步代码
  2. 事件循环的步骤:同步代码执行完毕,执行微任务队列中的任务,执行宏任务队列中的任务,执行微任务队列中的任务,执行宏任务队列中的任务,直到任务队列清空
  3. 事件循环的例子:setTimeout、Promise、async/await
  4. 事件循环的缺点:可能会导致性能问题,因为异步代码的执行顺序是不确定的,可能会导致内存泄漏,因为异步代码可能会导致内存泄漏

内存泄漏

  1. 内存泄漏是指程序在申请内存后,无法释放已申请的内存,导致内存占用不断增加,最终导致程序崩溃
  2. 内存泄漏的例子:闭包、全局变量、定时器、事件监听器
  3. 内存泄漏的解决方法:及时释放内存、避免闭包、避免全局变量、避免定时器、避免事件监听器

垃圾回收

  1. 垃圾回收是指程序在运行过程中,会自动释放不再使用的内存,以避免内存泄漏
  2. 垃圾回收的算法:标记-清除算法、引用计数算法
  3. 垃圾回收的缺点:可能会导致性能问题,因为垃圾回收需要占用CPU资源,可能会导致内存泄漏,因为垃圾回收无法释放闭包中的内存

Promise

  1. Promise 是一种异步编程的解决方案,它表示一个异步操作的最终完成(或失败),及其结果值

操作符

  1. 箭头函数:箭头函数是ES6中新增的一种函数表达式,它的语法更加简洁,并且没有自己的this、arguments、super或new.target
  2. 按位操作符:按位操作符是对数字的二进制位进行操作的,包括按位与、按位或、按位异或、按位非、左移、右移、无符号右移
  3. 逻辑操作符:逻辑操作符是对布尔值进行操作的,包括逻辑与、逻辑或、逻辑非
  4. 赋值操作符:赋值操作符是对变量进行赋值的,包括赋值、加赋值、减赋值、乘赋值、除赋值、取模赋值、左移赋值、右移赋值、无符号右移赋值、按位与赋值、按位或赋值、按位异或赋值
  5. 比较操作符:比较操作符是对两个值进行比较的,包括等于、不等于、全等于、不等于、大于、小于、大于等于、小于等于
  6. 条件操作符:条件操作符是对三个值进行比较的,包括条件运算符、三元运算符
  7. 逗号操作符:逗号操作符是对多个值进行操作的,包括逗号运算符、逗号分隔符
  8. instanceof操作符:instanceof操作符是用来判断一个对象是否是某个构造函数的实例的,返回boolean值
  9. typeof操作符:typeof操作符是用来判断一个值的类型的,返回string值
  10. delete操作符:delete操作符是用来删除一个对象的属性或数组的元素的,返回boolean值
  11. void操作符:void操作符是用来执行一个表达式,但不返回任何值的,返回undefined
  12. in操作符:in操作符是用来判断一个属性是否在一个对象中的,返回boolean值
  13. new操作符:new操作符是用来创建一个对象的,返回一个新对象
  14. this操作符:this操作符是用来指向当前对象的,返回一个对象
  15. super操作符:super操作符是用来指向当前对象的原型的,返回一个对象
  16. yield操作符:yield操作符是用来暂停函数的执行的,返回一个Generator对象
  17. yield操作符:yield操作符是用来暂停函数的执行的,返回一个Generator对象
  18. ...操作符:...操作符是用来展开一个数组或对象的,返回一个数组或对象
  19. =>操作符:=>操作符是用来定义箭头函数的,返回一个函数
  20. ?操作符:?操作符是用来定义条件运算符的,返回一个值
  21. :操作符::操作符是用来定义三元运算符的,返回一个值
  22. =操作符:=操作符是用来赋值的,返回一个值
  23. +=操作符:+=操作符是用来加赋值的,返回一个值
  24. -=操作符:-=操作符是用来减赋值的,返回一个值
  25. =操作符:=操作符是用来乘赋值的,返回一个值
  26. /=操作符:/=操作符是用来除赋值的,返回一个值
  27. %=操作符:%=操作符是用来取模赋值的,返回一个值
  28. <<=操作符:<<=操作符是用来左移赋值的,返回一个值
  29. =操作符:>>=操作符是用来右移赋值的,返回一个值

  30. =操作符:>>>=操作符是用来无符号右移赋值的,返回一个值

  31. &=操作符:&=操作符是用来按位与赋值的,返回一个值
  32. |=操作符:|=操作符是用来按位或赋值的,返回一个值
  33. ^=操作符:^=操作符是用来按位异或赋值的,返回一个值
  34. ==操作符:==操作符是用来判断两个值是否相等的,返回boolean值
  35. ===操作符:===操作符是用来判断两个值是否全等的,返回boolean值
  36. !=操作符:!=操作符是用来判断两个值是否不相等的,返回boolean值
  37. !==操作符:!==操作符是用来判断两个值是否不全等的,返回boolean值
  38. 操作符:>操作符是用来判断一个值是否大于另一个值的,返回boolean值

  39. <操作符:<操作符是用来判断一个值是否小于另一个值的,返回boolean值
  40. =操作符:>=操作符是用来判断一个值是否大于等于另一个值的,返回boolean值

  41. <=操作符:<=操作符是用来判断一个值是否小于等于另一个值的,返回boolean值
  42. &&操作符:&&操作符是用来判断两个值是否都为真的,返回boolean值
  43. ||操作符:||操作符是用来判断两个值是否至少有一个为真的,返回boolean值
  44. !操作符:!操作符是用来判断一个值是否为假的,返回boolean值
  45. +操作符:+操作符是用来加两个值的,返回一个值
  46. -操作符:-操作符是用来减两个值的,返回一个值
  47. *操作符:*操作符是用来乘两个值的,返回一个值
  48. /操作符:/操作符是用来除两个值的,返回一个值
  49. %操作符:%操作符是用来取模两个值的,返回一个值
  50. <<操作符:<<操作符是用来左移一个值的,返回一个值
  51. 操作符:>>操作符是用来右移一个值的,返回一个值

  52. 操作符:>>>操作符是用来无符号右移一个值的,返回一个值

  53. &操作符:&操作符是用来按位与两个值的,返回一个值
  54. |操作符:|操作符是用来按位或两个值的,返回一个值

Released under the MIT License.