百度面试一面凉经

  1. webpack 使用
  2. 实现格式居中
  3. 重排(回流),重绘
  4. 如何在编写js代码中避免重排,回流
    重排回流详情
    1.避免使用JS一个样式修改完接着改下一个样式,最好一次性更改CSS样式,或者将样式列表定义为class的名称
    2.避免频繁操作DOM,使用文档片段创建一个子树,然后再拷贝到文档中
    3.先隐藏元素,进行修改后再显示该元素,因为display:none上的DOM操作不会引发回流和重绘
    4.避免循环读取offsetLeft等属性,在循环之前把它们存起来
    5.对于复杂动画效果,使用绝对定位让其脱离文档流,否则会引起父元素及后续元素大量的回流
  5. 是否写过移动端
  6. js基本数据类型
    null undefine boolean number string symbol bigint
  7. 判断数据类型的方法。typeof ,instance,object.is,并详细
    typeof 是否能正确判断类型?对于原始类型来说,除了 null 都可以调用typeof显示正确的类型。
    对于引用数据类型,除了函数function之外,都会显示"object"。需要使用instance, 采用typeof判断对象数据类型是不合适的,采用instanceof会更好
    instanceof可以正确判断对象的类型,其内部运行机制是判断在其原型链中能否找到该类型的原型,不能判断原始数据类型,除非自己实现。
  8. 手写实现深拷贝
    浅拷贝的限制所在了。它只能拷贝一层对象。如果有对象的嵌套,那么浅拷贝将无能为力,需要深拷贝
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
}
  1. 实现一个数组,输出没有重复的数组。
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()方法不会修改原来的数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值