一、数据类型
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]'
二、原型和原型链
三、作用域与作用域链
1.非严格模式下,this 指向5种情况:
(1)看函数名前面有没有点,有点,点前面是啥 this 就是啥,没点就是 window;
(2)自执行函数的 this 永远是 window;
(3)给元素的某一个事件类型绑定一个方法,如 div.onclick=fn(){},当事件触发执行该方法时,该方法的this就是当前元素div;
(4)在构造函数模式创建类的时候,方法执行,里面的 this 就是当前类的一个实例;
(5)使用 call 和 apply 可以任意修改 this 的指向。
注:在ES6(严格模式)中,箭头函数的 this 为定义该函数时所在的作用域指向的对象
四、闭包
五、异步
- event loop
一个完整的事件循环:
宏任务开始 --> 执行所有的同步代码 --> 栈空 --> 查看微任务队列, 并按入队顺序执行 --> 微任务队列空 --> 当前事件循环技术
对于进入宏任务队列的异步任务(setTimeout回调等),则是在下一个事件循环开始时优先执行。
- Promise
Promise 面试题:【建议星星】要就来45道Promise面试题一次爽到底(1.1w字用心整理)
手写promise