# JS 基础

# 数据类型

# 基本类型有 7 种: undefinednullstringnumberbooleanbigintsymbol

# 引用类型有: ObjectArray

# For 循环

for..of..
for..in..
Array.prototype.foreach()
Array.prototype.map()
Array.prototype.filter()
Array.prototype.every()
Array.prototype.some()
Array.prototype.reduce()

数组原型链上的方法可能经常会拿出来单独考,如果平时不常使用就很容易卡壳,可以从数组去重这个切入点来巩固 for 循环。

# 数组方法:

数组常考,实际开发中也常用,需要尽量全面地了解。

push:末尾添加
unshift:首部添加
pop:末尾删除
shift:首部删除
concat:数组合并
join:数组元素通过连接符变成字符串
reverse:数组反转
sort:数组排序
flat:数组拍平
slice (start, end):切割,不改变原数组,返回新数组
splice (start, length, newItem):切割,改变数组,从指定位置开始删除,同时可插入新元素
indexOf:查找元素下标
map、foreach、filter ....

# 闭包

简单来说就是函数中嵌套函数,这个内部函数暴露给了外部调用。作用是可以访问局部变量,缺点是容易发生内存泄漏(即变量不会被自动回收)。

  1. 可以用来封装私有变量,编写 JS 库 / 插件可能会用到
  2. 用来实现节流这类函数
  3. 可以作为缓存数据的一种策略

# 原型链

每个函数都有 prototype 属性,每个函数实例对象都有一个 __proto__ 属性, __proto__ 指向了 prototype ,当访问实例对象的属性或方法,会先从自身构造函数中查找,如果找不到就通过 __proto__ 去原型中查找。

# 作用域链:

在当前作用域下找不到某个变量时就去父级作用域查找,依次向上一级一层层查找变量的过程就叫做作用域链。

# call、apply、bind

  • 共同点:都可以改变函数的作用域(改变 this 指向)
    call / apply :会立即执行函数,两者基本区别在于传参不同
    bind :不会立即执行

# this 的指向

# New 关键字

# 如何理解 foreach

# 关于深浅拷贝

# 浅拷贝:

# 深拷贝:

  1. JSON.parse(JSON.Stringify()) ,优点是简单,缺点是不能拷贝 Function、undefined 会丢失,时间对象会变成字符串。
  2. 深度递归遍历
  3. Object.assign (一层是深拷贝,嵌套二层以上为浅拷贝)

# JS 进阶

# ES6 新语法 / 特性

  1. 模板字符串
  2. letconst 关键字
  3. 箭头函数(没有自己的 this ,不能使用 new 命令,不能调用 call
  4. class
  5. Promiseasync / await (es7 之后才支持)
  6. exportimport 模块化(ES Module
  7. 对象扩展(很常用,键值对同名简写, Object.assign 拷贝或合并对象)
  8. 展开运算符(很常用, ... 用于组装数组 / 对象)
  9. 解构赋值(可简化提取数组 / 对象中的值,变量交换不用中间变量)
  10. Map (性能更好的对象)
  11. Set (元素值是唯一的,常用于数组去重)

# Map 和普通对象的区别:

  • 键值类型;
  • Map 有记录顺序,对象是无序的;
  • Map 采用红黑树来存储键值,储存大量数据时性能更优,对象需要维护键值对映射关系,会受到内存上的一些限制。

由于这些差异,通常在需要存储大量数据且需要按照特定规则查找和排序时,使用 Map 对象更为合适;而在存储少量数据,并且知道属性名的情况下,使用对象更加方便。

# 特殊类型 WeakMap:

  • Map 对象的键可以是任何类型,但 WeakMap 对象中的键只能是引用对象(如果对象不再被引用,则会自动 GC)
  • WeakMap 对象是不可枚举的,无法获取集合的大小

WeakMap 由于无法遍历和清空,使用场景比较有限,通常可以用于避免循环引用造成内存泄漏

# 继承

JS 实现继承写法如下,JAVA 直呼内行 (bushi

class B extends A {
    constructor() {
        super();
    }
}

# 高阶函数

高阶函数泛指那些操作其他函数的函数。简单来说,就是一个将函数作为 参数 或者 返回值 的函数。例如 Array.prototype.mapArray.prototype.filterArray.prototype.reduce 这些都是 JavaScript 原生的高阶函数。

更新于

请我喝[茶]~( ̄▽ ̄)~*

 微信支付

微信支付

 支付宝

支付宝

 贝宝

贝宝