前端面试题系列之JavaScript面试题六(每天巩固一点点)

16、给JS数组对象添加一个去重方法

解答:此题主要考查两个知识点,prototype原型属性和去重比较。通过往Array.prototype上添加方法让所有数组对象都能调用;去重比较要用三个等号严格比较值和类型,因为JS是弱类型脚本语言,一个JS数组对象里能存放各种类型数据。参考程序如下

/*通过往Array.prototype上添加方法让所有数组对象都能调用*/
Array.prototype.removeDuplication = function () {
    /*判断元素在数组里是否已存在,双下划线开头表示私有方法*/
    var __isExist = function (tmpArr, o) {
        if (tmpArr.length === 0) {
            return false;
        }
        var tmp;
        for (var i = 0, l = tmpArr.length; i < l; i++) {
            tmp = tmpArr[i];
            /*三个等号严格比较值和类型*/
            if (tmp === o) {
                return true;
            }
            /*需要特殊处理的情况*/
            if (!o && !tmp && tmp !== undefined && o !== undefined && isNaN(tmp) &&
                isNaN(o)) {
                return true;
            }
        }
        return false;
    };
    /*数组长度小于2,无需去重,使用Array.prototype.slice方法复制原数组*/
    if (this.length < 2) {
        return this.slice(0);
    }
    var outArr = [];
    for (var i = 0, l = this.length; i < l; i++) {
        if (!__isExist(outArr, this[i])) {
            outArr.push(this[i]);
        }
    }
    return outArr;
}
var arr = ['1', 2, 'a', 'c', '3', 1, 'c'];
console.log(arr.removeDuplication());

17、怎么获取浏览器的名称、版本号以及标识等信息?

解答:考查对Window.navigator对象的掌握程度,参考代码如下

/*Netscape*/
console.log( navigator.appName );
/*5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36*/
console.log( navigator.appVersion );
/*Mozilla*/
console.log( navigator.appCodeName );
/*Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36*/
console.log( navigator.userAgent );

18、JS怎么深度克隆对象?

解答:JS深度克隆对象主要是递归拷贝对象,直到目标不是对象类型,JS的数据结构中可以嵌套的有Array和Object两种。参考程序如下


function deepClone(Obj) {
        var buf;
        if (Obj instanceof Array) {
            /*创建一个空的数组,用于存放克隆的对象*/
            buf = [];
            var i = Obj.length;
            while (i--) {
                /*递归克隆*/
                buf[i] = deepClone(Obj[i]);
            }
            return buf;
        } else if (Obj instanceof Object) {
            /*创建一个空对象,用于存放克隆的对象*/
            buf = {};
            for (var k in Obj) {
                /*递归克隆*/
                buf[k] = deepClone(Obj[k]);
            }
            return buf;
        } else {
            return Obj;
        }
    }

    var arr = ['1', 2, 'a', 'c', '3', 1, ['x', 'y', 'z'], {"d": "e", "f": "g"}];
    console.log(deepClone(arr));

看完如果对你有帮助,感谢点击下面的一键三连支持下!

我的个人订阅号(大叔学前端/dashu_fe),文章第一时间在公众号发布,感兴趣的可以关注下,谢谢!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值