function compare(a,b){
var
pt = /undefined|number|string|boolean/,
fn = /^(function\s*)(\w*\b)/,
cr = "constructor",
cn = "childNodes",
pn = "parentNode",
ce = arguments.callee;
if(pt.test(typeof a) || pt.test(typeof b) || a === null || b === null){
return a === b || (isNaN(a) && isNaN(b)); //为了方便,此处假定NaN == NaN
}
if(a[cr] !== b[cr]){
return false;
}
switch(a[cr]){
case Date : {
return a.valueOf() === b.valueOf();
};
case Function : {
return a.toString().replace(fn,'$1') === b.toString().replace(fn,'$1'); //硬编码中声明函数的方式会影响到toString的结果,因此用正则进行格式化
};
case Array : {
if(a.length !== b.length){
return false;
}
for(var i=0;i<a.length;i++){
if(!ce(a[i],b[i])){
return false;
}
}
break;
};
default : {
var alen = 0, blen = 0, d;
if(a === b){
return true;
}
if(a[cn] || a[pn] || b[cn] || b[pn]){
return a === b;
}
for(d in a){
alen++ ;
}
for(d in b){
blen++;
}
if(alen !== blen){
return false;
}
for(d in a){
if(!ce(a[d],b[d])){
return false;
}
}
break;
};
}
return true;
}
console.log(compare({},{a:1})); //false
console.log(compare({a:1},{b:2})); //false
console.log(compare({b:2,a:1},{a:1,b:2})); //true
console.log(compare({a:function(){return false;},b:2},{a:function(){return false;},b:2})); //true
console.log(compare([],[])); //true
console.log(compare([2,1],[1,2])); //false
console.log(compare(function(){alert(1)},function(){})); //false
console.log(compare(function aaa(){alert(1)},function(){alert(1)})); //true
console.log(compare(document.getElementsByTagName("a")[0],document.getElementsByTagName("a")[1])); //false
console.log(compare(document.getElementsByTagName("a")[0],document.getElementsByTagName("a")[0])); //true
分享到:
相关推荐
可以直接使用VS打开直接...1、typeof - 返回值有六种可能:"number," "string," "boolean," "object," "function," 和 "undefined." 2、所以,typeof函数不仅可以判断某一个变量的类型,还是可以判断一个变量是否存在
关于js typeof 与 instanceof 判断数据类型区别及开发使用.docx
NULL 博文链接:https://onestopweb.iteye.com/blog/2327118
JS:typeof instanceof constructor prototype区别
JS中typeof与instanceof的区别
JavaScript typeof, null, 和 undefined JavaScript typeof, null, undefined, valueOf()。 typeof 操作符 你可以使用 typeof 操作符来检测变量的数据类型。 实例 typeof "John" // 返回 string typeof 3.14...
增强 javascript typeof 安装 这个模块是通过 npm 安装的: $ npm install simple-type 示例用法 var simpleType = require ( 'simple-type' ) ; simpleType ( [ 1 , 2 , 3 ] ) === 'array' // true simpleType ...
下面是对于typeof运算符的详细介绍跟typeof的一些用法,分析,学习typeof的朋友,看完了,这篇应该能有所收获。
今天写JS代码,遇到动态生成多个名称相同的input复选按钮 需要判断其是否是数组,用到了if (typeof(document.MapCheckMgr.checkid)!=undefined) 以前用得少,就顺便查了一下关于typeof的那些事 typeof用以获取一个...
JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。 它返回值是一个字符串...
JavaScript中的typeof其实非常复杂,他有六种返回的数据类型,它可以用来做很多事情,但同时也有很多怪异的表现.本文列举出了它的多个用法,有需要的小伙伴可以参考下。
JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。 它返回值是一个字符...
js判断undefined类型,可以使用typeof方法,typeof 返回的是字符串,其中就有一个是undefined
一个是 typeof 一个就是三元运算符 看完了上面的文章再看下面的就比较好理解了 一般来说常用的函数代码 function $(id){ return typeof id==='string'?document.getElementById(id):id;} var GetBy = function (id...
typeof是一个运算符,它对操作数返回的结果是一个字符串,有6种(只针对ES,不包含HOST环境对象)。 1.’undefined’ 2.’boolean’ 3.’string’ 4.’number’ 5.’object’ 6.’function’ 因为它本身是运算符,它...
刚开始学习js的朋友可能会有些疑问,其实这段代码使用js的三元运算符,这样代码看起来高大上,最主要是代码段少
我在看别人代码的时候,有看到代码是这样写的 function(){ fn&&fn() } 大概意思是这么个意思,但是这我感觉这样写好像没意义,有带佬能...在 js 里面,这是标准的。大幅减少代码量,比三目运算更直接了当。别的语言大
typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined。我们可以使用typeof来获取一个变量是否存在,如 if(typeof a != “undefined”){},而不要去...