JS
类型判断
typeof: new Number(1) / NaN / [ ] / 正则 / document.all link
判断是数组的几种方法 link
闭包的原理
闭包怎么形成
实现一个可以统计调用次数的装饰器
ES6模块输出的值
与commonjs的对比
V8垃圾清理机制
数组去重的多种实现思路
关于var let const
var x = 20
function f(){
console.log(x)
var x = 10
}
Promise.race( ) vs Promise.any( )
Promise中的异常处理:
Promise内部的异常?
then中抛出的异常?
async函数中的异常
手写debounce link
手写throttle
手写各种..
https://jinlong.github.io/2016/04/24/Debouncing-and-Throttling-Explained-Through-Examples/
实现深拷贝
对数组/对象/函数/循环引用的处理
用 JSON.parse(JSON.strstringify()) 进行深拷贝可能存在的问题
不能处理循环引用和函数
不支持NaN,Infinity,甚至精确的浮点数
Maps, Sets, RegExps, Dates, ArrayBuffers和其他内置对象序列化可能存在问题
var x = {}
var y = {x}
x.y = y
var copy = JSON.parse(JSON.stringify(x))
// 处理循环引用 https://github.com/youzpan/blog/issues/4
var handleCircular = function() {
var cache = [];
var keyCache = []
return function(key, value) {
if (typeof value === 'object' && value !== null) {
var index = cache.indexOf(value);
if (index !== -1) {
return '[Circular ' + keyCache[index] + ']';
}
cache.push(value);
keyCache.push(key || 'root');
}
return value;
}
}
var tmp = JSON.stringify;
JSON.stringify = function(value, replacer, space) {
replacer = replacer || handleCircular();
return tmp(value, replacer, space);
}
事件循环
浏览器与Node事件循环的区别
CSS
rem 移动端如何适配, 如何确定rem的值
一个display: flex的容器下三个元素, 一个设了flex:1, 另两个没设, 是什么结果
flex-grow flex-shrink 的空间分配机制
HTML
HTML 加载过程
script标签阻塞加载 async defer
DOMContentLoaded, load, beforeunload, unload
async 与 DOMContentLoaded