一些常见JS面试题

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)



猜你喜欢

转载自blog.csdn.net/Dong8508/article/details/80537030