1、null 和 undefined 的区别
undefined 表示一个变量自然的、最原始的状态值,而 null 则表示一个变量被人为的设置为空对象,而不是原始状态
undefined出现的几种情况:
1、声明了变量,但没有赋值
2、访问对象上不存在的属性
3、函数定义了形参,但没有传递实参
4、使用void对表达式求值
null属于类型Null
2、介绍下 Set、Map、WeakSet 和 WeakMap 的区别?
Set
1. 成员不能重复;
2. 只有键值,没有键名,有点类似数组;
3. 可以遍历,方法有add、delete、has
WeakSet
1. 成员都是对象(引用)
2. 成员都是弱引用,随时可以消失(不计入垃圾回收机制)。
可以用来保存 DOM 节点,不容易造成内存泄露;
3. 不能遍历,方法有add、delete、has;
Map
1. 本质上是键值对的集合,类似集合;
2. 可以遍历,方法很多,可以跟各种数据格式转换;
WeakMap
1. 只接收对象为键名(null 除外),不接受其他类型的值作为键名;
2. 键名指向的对象,不计入垃圾回收机制;
3. 不能遍历,方法同get、set、has、delete;
3、js中内存泄露的情况
1、意外的全局变量
2、闭包
3、未被清空的定时器
4、未被销毁的事件监听
5、DOM引用
4、今日头条面试题,写出下边的运行结果
` // 今日头条面试题
async function async1() {
console.log('async1 start')
await async2()
console.log('async1 end')
}
async function async2() {
console.log('async2')
}
console.log('script start')
setTimeout(function () {
console.log('settimeout')
})
async1()
new Promise(function (resolve) {
console.log('promise1')
resolve()
}).then(function () {
console.log('promise2')
})
console.log('script end') `