03-JS相关

JS 有哪些数据类型

  • 基本数据类型:string number bool undefined null

  • 引用数据类型:object、symbol。

另外,object 包括:数组、函数、正则、日期等对象。NaN属于number类型。

注意,数据类型里,没有数组。因为数组属于object(一旦说数组、函数、正则、日期、NaN是数据类型,直接0分)。

Promise 怎么使用

then:

    $.ajax(...).then(成功函数, 失败函数)

链式 then:

     $.ajax(...).then(成功函数, 失败函数).then(成功函数2, 失败函数2)

如何自己生成 Promise 对象:

    function xxx(){
      return new Promise(function(resolve, reject){
          setTimeout(()=>{
              resolve() 或者 reject()
          },3000)
      })
  }
  xxx().then(...)

ajax手写

闭包是什么

参考链接:

这段代码里的 this 是什么?

1、fn() 里面的 this 就是 window

2、fn() 是 strict mode,this 就是 undefined

3、a.b.c.fn() 里面的 this 就是 a.b.c

4、new F() 里面的 this 就是新生成的实例

5、() => console.log(this) ,这个this指的是外面的 this。

参考链接:

什么是立即执行函数?作用是?

立即执行函数:

(1)声明一个匿名函数,(2)马上调用这个匿名函数。如下:

作用:创建一个独立的作用域,防止污染全局变量。

因为我们只能通过函数的形式声明一个局部变量。当有了ES6之后,我们可以通过let来定义一个局部变量:

上面这段代码,就相当于立即执行函数。有了let,立即执行函数就毫无意义。

参考链接:

ES6 新特性

async/await 语法了解吗?目的是什么?

目的:把异步代码写成同步代码的形式。

我们知道,promise是这样写的:

有了await之后,可以直接替换掉then。如下:

如何实现深拷贝

方式一:JSON 来深拷贝

缺点:JSON 不支持函数、引用、undefined、RegExp、Date……

方式二:递归拷贝

如何实现数组去重

方式1:计数排序的逻辑(只能针对正整数)

方式二:set

方式三

如何用正则实现 string.trim()

JS 原型是什么?

参考链接:

ES 6 中的 class 了解吗?

参考链接:

如何实现继承

  • 构造函数

  • 原型链

  • extends

Last updated