-typeof:方法重写
由于typeof方法存在一些问题,null一个原始值返回object,且没有办法区分出
包装类,所以我们要写一个更好的方法。
首先我们得把null单独列出来,然后写typeof返回结果为“object”的不同情况,有数组,对象还有包装类,这时我们想到用Object.prototype.toString的方法去执行,然后从返回的结果判断。巧妙新建一个对象,属性名称为toString方法后的结果。
function type(target) {
var template = {
"[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") {
//数组,对象,包装类用toString()区别
var str = Object.prototype.toString.call(target);
return template[str];
} else {
return typeof target;
}
}
-数组去重(哈希)
利用对象的属性唯一性,将数组的值赋给对象属性!
//数组去重,要求在原型链上添加函数编程,利用对象的性质,哈希方法
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;
};