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),文章第一时间在公众号发布,感兴趣的可以关注下,谢谢!