欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一些常见JS面试题

程序员文章站 2022-03-04 12:16:39
...

1、监测数据类型

 function isType(o) {
      return  Object.prototype.toString.call(o).slice(8,-1);
    }

2、实现函数bind 的方法

Function.prototype.bind=Function.prototype.bind || function (context) {
        var self =this;
        return function () {
            return self.apply(context,arguments)
        }
    }

3、数据对象的克隆

function clone(Obj) {
        var newObj;   
        if (Obj instanceof Array) {
            newObj = [];  // 创建一个空的数组
            var i = Obj.length;
            while (i--) {
                newObj[i] = clone(Obj[i]);
            }
            return newObj;
        } else if (Obj instanceof Object){
            newObj = {};  // 创建一个空对象
            for (var k in Obj) {  // 为这个对象添加新的属性
                newObj[k] = clone(Obj[k]);
            }
            return newObj;
        }else{
            return Obj;
        }
    }

4、区分类型的数组去重

   var a1 = [1,2,2,3,"2"];
    //es6写法   
    Array.from(new Set(a1));
    //es5写法
    function distinct(o) {
        var temobj={};
        var result =[];
        o.forEach(function (a) {
            var key = (typeof a)+a;
            if(!temobj[key]){
                temobj[key]=true;
                result.push(a)
            }
        })
        return result;
    }
    console.log(distinct(a1))
5、获取查询字符串
function queryUrlParam(url) {
    var url = url||window.location.href;
    var reg = /([^?=&]+)=([^?=&]+)/g;
    var obj ={};
    url.replace(reg,function () {
        var arg = arguments;
        console.log(arg);
        obj[arg[1]]=arg[2];
    });
    return obj;
}

6、斐波那契数列

//使用递归实现

     function fn(n){
        if(n==1|n==2){
            return 1;}
        //因为斐波那契数列格式为:1、1、2、3、5、8、13、21、34、......,n=1和n=2的时候都是输出1
        return fn(n-1)+fn(n-2);
       //不断调用自身函数,n-1是穿进去的参数的前一次,就是最后n的前一个数字。所以n-2是最后传入参数的前两个数字。
    }


 //用函数写出斐波那契数列
    var n=parseInt(prompt('请输入一个数字'));
    var a1=1;
    var a2=1;
    var a3=0;
    for(var i=2;i<=n;i++){//因为前两个数都是1,所以要从i=2开始,就是前两个数的1+1=2,i的初始值其实是第三个数
        a3=a1+a2;//第三个数等于第一个数加上第二个数
        a1=a2;//第一个数就变成了之前的第二个数
        a2=a3;//第二个数就变成了刚刚的第三个数
    }
    console.log(a3);

7、求数组第二大数

var aa=[1,3,5,2,7,6]
aa[aa.indexOf(Math.max.apply(null,aa))]=null //找到第一大的数,置位空。
Math.max.apply(null,aa)
es6: 求最大值。
Math.max(...aa)