笔试题
- null和undefined的区别?
答: null 默认转成 0
undefined 默认转成 NaN
- ==,===,Object.is的区别
答: +0不等于-0
NaN等于自身
- web安全问题有哪些,如何解决
答: 这个要回答的就有点广了,大概说两个就可以,免得说多了给自己挖坑。
1.常见的XSS攻击,常见解决方案:过滤、输入输出编码,用户安全加固
2.XSRF,解决方法:检查HTTP头部Refer信息,使用一次性令牌,使用验证图片,判断HTTP请求类型
3.文件上传,解决方法:过滤文件格式
- 长渲染列表优化
两种,一个是懒加载,一个是分页
- 如何判断数据类型
function typeof(obj) {
return Object.prototype.toString.call(obj).slice(1, -1).split(' ')[1].toLowerCase();
}
- 说一下深拷贝和浅拷贝,深拷贝可能会出现什么问题
简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,
拿人手短,如果B没变,那就是深拷贝,自食其力
深拷贝的问题,拷贝函数比较麻烦
- setTimeout,setInterval,requestAnimationFrame区别
setTimeout(code, millseconds) 用于延时执行参数指定的代码,如果在指定的延迟时间之前,你想取消这个执行,那么直接用clearTimeout(timeoutId)来清除任务,timeoutID 是 setTimeout 时返回的;
setInterval(code, millseconds)用于每隔一段时间执行指定的代码,永无停歇,除非你反悔了,想清除它,可以使用 clearInterval(intervalId),这样从调用 clearInterval 开始,就不会在有重复执行的任务,intervalId 是 setInterval 时返回的;
requestAnimationFrame(code),一般用于动画,与 setTimeout 方法类似,区别是 setTimeout 是用户指定的,而 requestAnimationFrame 是浏览器刷新频率决定的,一般遵循 W3C 标准,它在浏览器每次刷新页面之前执行。
原文 https:
- Ajax原理
var xhr = new XMLHttpRequest()
xhr.open('GET', 'http://xxx/xxx.php')
xhr.send()
- 说一下微任务,宏任务
这道题送分题,就是优先级,大小级的事,可以理解成国和家的概念,先有国后有家。
而宏任务一般是:包括整体代码script,setTimeout,setInterval。
微任务:Promise,process.nextTick。
- 写一个'let's my family' 返回's'tel ym ylimaf,每个字符反转函数
这个也是很常见的一个老题了js反转字符串,就是123反转321,方法有三种:
1. var name = "My city is WH";
var nameArr = name.split('');
var result=[];
var resultStr = '';
for (var i = 0, l = nameArr.length; i < l; i++) {
result.unshift(nameArr[i]);
}
for (var i = 0, l = result.length; i < l; i++) {
resultStr += result[i];
}
console.log(resultStr);
2. var name = "My city is WH";
var resultStr = name.split('').reverse().join('');
console.log(resultStr);
3. var name = "My city is WuHan";
var nameArr = name.split('');
var resultStr = '';
for (var i = nameArr.length-1; i >= 0; i--) {
resultStr += name.charAt(i);
}
console.log(resultStr);
- 写一个函数实现a(1)打印1,a(1)(2)打印3 ,a(1)(2)(3)打印6等等
ES5写法
function add (...args) {
return args.reduce((prev, val) => {
return prev + val
})
}
let rs = add(1, 2, 3, 4, 5, 6)
console.log(rs)
ES6写法
function add (a) {
function sum(b) {
a = a + b;
return sum;
}
sum.toString = function() {
return a;
}
return sum;
}
console.log(add(1)(3))
console.log(add(1)(3)(5))
好了写完这个也关电脑放假了,预祝大家新年快乐,新的一年升职加薪,跳槽顺利。