typeOf 返回的数据类型有哪些
手写深度比较函数,模拟lodash的 isEqual()
string.split()和arr.jion()的区别
数组中哪些方法是纯函数,哪些是非纯函数
数组中的splice和slice的区别,splice会改变原数组的值
网红题目 [1,2,3].map(parseInt) // [1,NaN,NaN]
原因: parseInt(17,2) // NaN, 因为parseInt的第个参数进制基数radix必须是10、8、16、2 parseInt(10,2) // 2
parseInt(10,8) // 8
parseInt(10,16) //16
let a = function(){} 和 function a(){} 的区别
let a是函数表达式,function a是函数声明,函数声明可以在代码执行前预加载,所以在function a上面执行 a()不会报错;
new Object()和 Object.create()的区别
new Object() 等于 let a = {}, 它是有原型属性的 而Object.create()参数中可以指定原型对象,所以当传入null的时候,例如Object.create(null) 它是没有原型属性的。
异步操作的相关题目
let i for(i = 1; i<=3; i++){ setTimeout(function(){ console.log(i) }) } // 4 4 4
解释如果不使用setTimeout结果是 1 2 3,用了之后则会先执行同步任务的for循环,结束之后i的值为4,因为循环了3次,webApi中会往事件队列中放入3个function,所以打印了3次i
作用域相关题目
let a = 100 function test(){ alert(a) a = 10 alert(a) } test() alert(a) // 100 10 10
捕获错误的2种方式 try catch和window.onerror
获取url参数的2种方式
老:location.search // '?a=1&b=2' 需要自己实现个方法去获取对应的参数 新:URLSearchParams
let params = new URLSearchParams(location.search)
console.log(params.get('a'))
将url参数解析为js对象
function queryToObj(){ const res = {} cosnt pList new URLSearchParams(location.search) pList.forEach((val,key)=>{ res[key] = val }) return res }
数组拍平
数组去重
手写深拷贝
RAF( window.requestAnimationFrame)
可以让动画更流畅,比setTimeout更适合做动画,自动控制频率,dom隐藏或窗口切换后会暂停,性能更好 比如我们要做60帧的动画,1秒要用setTimeout执行60次