美文网首页前端开发那些事儿
web前端 -- JavaScrip面试题集

web前端 -- JavaScrip面试题集

作者: 韩发发吖 | 来源:发表于2021-04-08 14:43 被阅读0次

    js 数据类型

    js中有5种基本类型:Number String undefined Null Boolean 和一种引用类型 Object,目前细分如下:

    值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。

    引用数据类型:对象(Object)、数组(Array)、函数(Function)、
    日期(Date)、正则(RegExp)。
    Symbol由ES6规范引入的一项新特性,目前在react里面用的比较多

    /**
     * @param  {any} description 描述信息。可以是任何可以被转型成字符串的值,如:字符串、数字、对象、数组等
     */
    function Symbol(description?: any): symbol
    

    js 判断数据类型方法

    具体问题参考我的文章web前端 -- js 判断数据类型方法

    js 字符串与数组相互转化

    1、 split() 方法把字符串转换为数组。
    2、使用 join() 方法可以把数组转换为字符串。

    js 防抖和节流

    1、防抖函数
    理解:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间
    思路:每次触发事件时都取消之前的延时调用方法
    2、节流函数
    理解:高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率
    解释:每次触发事件时都判断当前是否有等待执行的延时函数
    这里之后会补充下具体实现

    浅拷贝和深拷贝

    1、浅拷贝:拷贝只是地址。

    var a = 1;
    var b = a;
    a = 3;
    console.log('结果1 ==',a); // 结果1 == 3
    console.log('结果2 ==',b); // 结果2 == 1
    

    通俗解释:通过b=a 把a的地址赋值给b,随后a发生了改变,但是b还是自己初始的值,没有发生变化,这里只是地址的拷贝是浅拷贝。

    // Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
    const obj1 = {a:{b:1}};
    const obj2 = Object.assign({},obj1);
    obj1.a.b = 2;
    console.log('结果==',obj2.a.b)  // 结果== 2
    

    2、深拷贝:拷贝不是地址。

    var obj = {people: qianqian}       
    var obj2 = JSON.parse(JSON.stringify(obj))
    

    copy一个地址没乱用,改了地址里面的东西原来的还是会变。

    事件循环 EventLoop

    请参考《什么是 Event Loop?》

    设计模式

    设计模式都是面向对象的,我用过比较了解有以下几种:
    1、单例模式:保证一个类仅有一个一个实例,并提供一个访问它的全局访问点。
    2、观察者模式:又称发布订阅者模式,经典案例:事件监听,一个元素同时监听多个同类型事件,元素对象即为发布者,每一个事件处理函数即为订阅者。
    3、代理模式:为其他对象提供一种代理以控制对这个对象的访问,为了不暴露执行对象的部分代码。
    4、工厂模式:做一个对象创建的封装,并将创建的对象return出去。通俗解释就是是函数式声明,把创建类的逻辑都封装到函数内部。

    相关文章

      网友评论

        本文标题:web前端 -- JavaScrip面试题集

        本文链接:https://www.haomeiwen.com/subject/dstvkltx.html