javascript范例推断
在js中,中心给我们供应了typeof要领来推断一个变量的范例,返回的是字符串型,然则关于数组,或许对象和函数,我们就没有什么要领了。然则我们能够援用对象也就是Object的toString要领来完成对范例的推断,例:
例子
var arr = [];
console.log(typeof arr);//object
console.log(Object.prototype.toString.call(arr));//[object Array]
Ps:关于数组而言,arr的typeof后的范例是Object,这并非我们想要的,而用Object的toString要领来讲就很明白的能够推断出是什么范例的了,然则[object Array]这类情势,我们不幸亏顺序内里来处置惩罚,所以本人在一样平常事情中封装了一个简朴的要领来返回出范例的字符串,例:
例子
function getType(ele){
if(!ele)return undefined;
var type = Object.prototype.toString.call(ele),
reg = /\[object (.*)\]/,
arr = reg.exec(type);
return arr[1];
}
Ps:如许就返回了一个字符串情势的范例,能够返回String,Number,Bloolen,Function,Array,Object,undefined,Null这几个字符串,那末在顺序中就好推断了。
更新一个范例推断的插件
代码
var Type = (function() {
var Type = function() {
if (!this instanceof Type) {
return new Type();
}
};
var menth = {
version: 'v1.0',
getType: function(ele) {
if (window == document && document != window) {
return 'window';
} else if (ele.nodeType === 9) {
return 'document';
} else if (ele.callee) {
return 'arguments';
} else if (isFinite(ele.length) && ele.item) {
return 'NodeList';
} else {
var type = Object.prototype.toString.call(ele),
reg = /\[object (.*)\]/,
arr = reg.exec(type);
return arr[1];
}
},
isArray : function(ele){
return (this.getType(ele) === 'Array') ? true : false;
},
isFunction : function(ele){
return (this.getType(ele) === 'Function') ? true : false;
},
isObject : function(ele){
return (this.getType(ele) === 'Object') ? true : false;
},
isString : function(ele){
return (this.getType(ele) === 'String') ? true : false;
},
isNumber : function(ele){
return (this.getType(ele) === 'Number') ? true : false;
},
isBoolen : function(ele){
return (this.getType(ele) === 'Boolean') ? true : false;
},
isUndefined : function(ele){
return (this.getType(ele) === 'Undefined') ? true : false;
},
isNull : function(ele){
return (this.getType(ele) === 'Null') ? true : false;
}
}
Type = extendDeep(Type.prototype,menth);
// 扩大东西
function extendDeep() {
var i,
target = arguments[0] || {},
astr = '[object Array]',
toStr = Object.prototype.toString,
yArr = Array.prototype.slice.call(arguments, 1);
for (i = 0, len = yArr.length; i < len; i++) {
var temp = yArr[i];
for (var j in temp) {
if (target.hasOwnProperty(j) && (target[i] === temp[i])) {
continue;
}
if (temp.hasOwnProperty(j)) {
if (typeof temp[j] === 'object') {
target[j] = (toStr.call(temp[j] === astr)) ? [] : {};
extendDeep(target[j], temp[j]);
} else {
if (typeof temp[j] !== 'undefined') {
target[j] = temp[j];
}
}
}
}
}
return target;
}
console.log(Type)
return Type;
})();