JS 知识点

100 阅读2分钟

一、数据类型

1.八种数据类型:

undefined、null、boolean、string、number、object、symbol、bigint(末尾加n即为大数)

其中,symbol 和 bigint 类型是 ES6 新增的数据类型。

2.类型判断:3种方法

(1)typeof

除null、对象、数组及其他对象类型(如Math)都返回 object外,其余类型(包括function)均返回准确类型。

(2)instanceof

依赖原型链,因此只能判断对象类型,不能判断基本数据类型。

(3)Object.prototype.toString.call(obj)

能准确判断所有数据类型,返回值为字符串[object Array]

Object.prototype.toString.call(new Date()); //'[object Date]'

3.面试题:判断数组

Array.isArray([1,2,3]); // true
[1,2,3].__proto__ === Array.prototype; // true
[1,2,3] instanceof Array; // true
Object.prototype.toString.call([1,2,3]); // '[object Array]'

二、原型和原型链

image.png

三、作用域与作用域链

1.非严格模式下,this 指向5种情况:

(1)看函数名前面有没有点,有点,点前面是啥 this 就是啥,没点就是 window;

(2)自执行函数的 this 永远是 window;

(3)给元素的某一个事件类型绑定一个方法,如 div.onclick=fn(){},当事件触发执行该方法时,该方法的this就是当前元素div

(4)在构造函数模式创建类的时候,方法执行,里面的 this 就是当前类的一个实例;

(5)使用 call 和 apply 可以任意修改 this 的指向。

注:在ES6(严格模式)中,箭头函数的 this 为定义该函数时所在的作用域指向的对象

四、闭包

五、异步

  1. event loop

参考:juejin.cn/post/696902…

一个完整的事件循环:

宏任务开始 --> 执行所有的同步代码 --> 栈空 --> 查看微任务队列, 并按入队顺序执行 --> 微任务队列空 --> 当前事件循环技术

对于进入宏任务队列的异步任务(setTimeout回调等),则是在下一个事件循环开始时优先执行。

  1. Promise

Promise 面试题:【建议星星】要就来45道Promise面试题一次爽到底(1.1w字用心整理)

手写promise

参考:juejin.cn/post/694531…