js手写面试题

1.数据类型判断

typeOf适用于判断undefined、Boolean、Number、string、symbole、function,但是对于其他的类型,比如null、date来判断数据类型可能会不准确。这时候就可以使用Object.protytype.toString.call(object)来实现。

例如:
function typeOf(ocject){
	let res = Object.prototype.toString.call(object).split(' ')[1];
	res = res.subString(0,res.length-1).toLowerCase()
	return res
}
typeOf([]) //array
typeOf({}) //object
typeOf(new Date()) //date
ps:toString.call()是对象的方法。而直接使用array.toString()是数组的方法。Array重写了对象的方法。
2.闭包使用场景
防抖节流
思路:1. 创建一个定时器时间 2.返回一个方法,3.清除定时器 4,创建一个定时器来执行方法
        var ceshi = document.getElementById('ceshi');
        ceshi.addEventListener('click', debounce(showMsg, 500), false)

        function showMsg() {
            console.log('防抖');
        }

        function debounce(func, wait) {
            let timeer;
            return function () {
	                let arg = arguments;
                clearTimeout(timeer);
                timeer = setTimeout(() => {
                    func.apply(this, arg )
                }, wait);
            }
        }
3.原型链
4.去重
    var list = [1, 2, 3, 5, 6, 8, 7, 9, 7];
    var newList = list.filter((item, index, arr) => arr.indexOf(item) === index)
    console.log(newList);//[1, 2, 3, 5, 6, 8, 7, 9]
5.计数
    let string = "sdfagsfaad";
    const table = {}
    for (let char of string) {
        table[char] = table[char] + 1 || 1;
    }
    console.log(table, 'table');{s: 2, d: 2, f: 2, a: 3, g: 1} "table"
    
map实现
    let string = 'kapilalipak';
    const countMap = new Map();
    for (let i = 0; i < string.length; i++) {
        if (countMap.has(string[i])) {
            countMap.set(string[i], countMap.get(string[i]) + 1)
        } else {
            countMap.set(string[i], 1)
        }
    }
    console.log(countMap, 'count');//{"k" => 2, "a" => 3, "p" => 2, "i" => 2, "l" => 2}
6.洗牌数组
    const list = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    list.sort(() => {
        return Math.random() - 0.5;
    });
7.将Object属性转换为属性数组
const obj = { a: 1, b: 2, c: 3 };

Object.entries(obj);
// Output
(3) [Array(2), Array(2), Array(2)]
0: (2) ["a", 1]
1: (2) ["b", 2]
2: (2) ["c", 3]
length: 3

Object.keys(obj);
(3) ["a", "b", "c"]

Object.values(obj);
(3) [1, 2, 3]
8.watch和computed
 computed:会进行缓存,只有数据发生改变的时候才会修改,节省性能。默认get:,可以加set。watch,立即执行,deep属性可以监听对象。immediate立即执行
watch立即执行 immediate=true
9.如何优化vue首屏加载慢的问题
1.路由懒加载 component: () => import("../views/succase.vue")
2.代码层面的优化,精灵图,组件化模块化,优化代码逻辑,提高代码复用性等。
3. 对于一些通用的工具库可以采用CDN引入
4. 组件按需加载,vant的组件
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值