- webpack 使用
- 实现格式居中
- 重排(回流),重绘
- 如何在编写js代码中避免重排,回流
重排回流详情
1.避免使用JS一个样式修改完接着改下一个样式,最好一次性更改CSS样式,或者将样式列表定义为class的名称
2.避免频繁操作DOM,使用文档片段创建一个子树,然后再拷贝到文档中
3.先隐藏元素,进行修改后再显示该元素,因为display:none上的DOM操作不会引发回流和重绘
4.避免循环读取offsetLeft等属性,在循环之前把它们存起来
5.对于复杂动画效果,使用绝对定位让其脱离文档流,否则会引起父元素及后续元素大量的回流 - 是否写过移动端
- js基本数据类型
null undefine boolean number string symbol bigint - 判断数据类型的方法。typeof ,instance,object.is,并详细
typeof 是否能正确判断类型?对于原始类型来说,除了 null 都可以调用typeof显示正确的类型。
对于引用数据类型,除了函数function之外,都会显示"object"。需要使用instance, 采用typeof判断对象数据类型是不合适的,采用instanceof会更好
instanceof可以正确判断对象的类型,其内部运行机制是判断在其原型链中能否找到该类型的原型,不能判断原始数据类型,除非自己实现。 - 手写实现深拷贝
浅拷贝的限制所在了。它只能拷贝一层对象。如果有对象的嵌套,那么浅拷贝将无能为力,需要深拷贝。
let map=new WeakMap()
function deep(obj){
let newobj=null;
if(typeof obj==="object"&&obj!==null){
if(map.has(obj)){
newobj=map.get(obj);
}else{
// newobj=obj instanceof Array?[]:{}
newobj=Array.isArray(obj)?[]:{}
map.set(obj,newobj)
for(let i in obj){
newobj[i]=deep(obj[i])
}
}
}else{
newobj=obj;
}
return newobj
}
- 实现一个数组,输出没有重复的数组。
var array=[1,2,3,4,3,2,1,5]
function f(arr) {
if(Array.isArray(arr)) {
let map = new Map();
for (let i = 0; i < arr.length; i++) {
if (map.has(arr[i])) {
let v = map.get(arr[i]) + 1;
map.set(arr[i], v)
} else {
map.set(arr[i], 1);
}
}
let res=[];
//map.entries中的item为数组格式,item[0]为key item[1]为value
// for(let item of map.entries()){
// if(item[1]===1){
// res.push(item[0]);
// }
// }
//map.forEach回调函数的第一个值为value,第二个值为key
map.forEach((value, key) => {
if (value=== 1) res.push(key);
},map)
console.log(res);
}
}
f(array)
10.map和foreach的区别,
forEach()方法不会返回执行结果,返回值为“undefined”,而map()方法会返回运算结果,会返回一个数组;2、forEach()方法会修改原来的数组,而map()方法不会修改原来的数组。