首页 > 编程语言 >javascript - 练习题:自定义typeof / 数组去重

javascript - 练习题:自定义typeof / 数组去重

时间:2022-11-04 19:04:59浏览次数:37  
标签:练习题 object return target 自定义 javascript typeof 数组 var

自定义typeof函数

为啥要自定义 typeof ,因为 引用值 会被 typeof 输出为 object 。 

换句话说: typeof 不能区分 引用值(数组、对象和包装类) 的具体类型;

typeof 本身是可以区分原始值和函数的。

思路:

1,分两类:原始值,引用值;

2,区分引用值,用 Object.prototype.toString方法的返回结果来区分;

2.1,array :[object Array];

2.2,object : [object Object]; 

2.3,Number : [object Number]; 

2.4,Boolean : [object Boolean]; 

2.5,string : [object String]; 

 看下代码:

function myType(target) {
var tempObj ={
"[object Array]" : "array",
"[object Object]" : "object",
"[object Number]" : "number - object",
"[object Boolean]" : "boolean - object",
"[object String]" : "string - object"
}
if (target === null) {
return "null";
}
if (typeof (target) == 'object') {
// 数组,对象,包装类
var str = Object.prototype.toString.call(target);
return tempObj[str];
}else{
return typeof(target);
}
}

看控制台结果:

javascript - 练习题:自定义typeof / 数组去重_typeof

再给他简化一下:

function myType(target) {
var ret = typeof (target);
var tempObj ={
"[object Array]" : "array",
"[object Object]" : "object",
"[object Number]" : "number - object",
"[object Boolean]" : "boolean - object",
"[object String]" : "string - object"
}
if (target === null) {
return "null";
}else if (ret == 'object') {
// 数组,对象,包装类
var str = Object.prototype.toString.call(target);
return tempObj[str];
}else{
return ret;
}
}

这样一个现成的工具函数就封装好了,可以收藏起来放到自己的工具库中,以备后用。


数组去重

要求在原型上写数组去重的方法。

var arr = [1,1,1,2,2,2,3,3,3]

思路:利用对象的属性名不能重复的特点;

Array.prototype.unique = function(){
var temp = {},
arr = [],
len = this.length;

for(var i = 0 ; i< len ; i++){
if(!temp[this[i]]){
temp[this[i]] = "abc";
arr.push(this[i]);
}
}

return arr;
}

分析:

1,一共循环 len 遍,this的指向是谁调用就指向谁;

2,this[i] 是指代当前数组的第 i 位的值;

3, temp[this[i]] 是把当前数组第 i 位的值来当做临时对象的对象名来取;

3.1 , 有值,代表当前对象名已经存在,结束本轮循环;

3.2,  没有值,代表当前对象名还不存在,那就把当前数组第 i 位的值来当做临时对象的对象名,并给赋个临时值 "abc";顺便把淘出来的值,放在新的数组里,最后返回这个新数组;












标签:练习题,object,return,target,自定义,javascript,typeof,数组,var
From: https://blog.51cto.com/ahuiok/5824682

相关文章