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
分享到:
相关推荐
这篇博客“JS 使用 typeof 获取数据类型”深入探讨了如何利用`typeof`来识别和处理不同类型的JavaScript数据。 首先,`typeof`返回的是一个字符串,这个字符串描述了变量的类型。它适用于原始数据类型(如`...
在JavaScript编程语言中,typeof是一个运算符,用于检测变量的数据类型。它能够返回一个表示变量类型的字符串值。尽管typeof在使用过程中非常直观,但它也有一些不太为人所知的特性,以及一些在历史上被认为是错误的...
可以直接使用VS打开直接...1、typeof - 返回值有六种可能:"number," "string," "boolean," "object," "function," 和 "undefined." 2、所以,typeof函数不仅可以判断某一个变量的类型,还是可以判断一个变量是否存在
JS 中 typeof 与 instanceof 的区别 在 JavaScript 中,typeof 和 instanceof 是两个常用的运算符,用来判断一个变量是否为空,或者是什么类型的。但是,这两个运算符之间还是有区别的。 typeof 运算符是一个一元...
在JavaScript(JS)编程语言中,确定变量或对象的类型是一项基本且重要的任务。这不仅有助于理解代码的行为,还能在调试、数据验证以及实现特定功能时提供帮助。本文将深入探讨四种常用的方法来识别和判断JavaScript...
`typeof` 是JavaScript中的一个一元操作符,用于返回变量的类型表示。它返回的值是一个字符串,可以用来识别以下几种基本类型: - `undefined`:如果变量未定义或未赋值,`typeof`会返回`"undefined"`。 - `boolean...
在JavaScript编程语言中,了解和正确使用数据类型是非常重要的,特别是`typeof`操作符、`null`和`undefined`这三个概念。它们在处理变量和数据时起着关键作用。 `typeof`操作符: `typeof`是JavaScript中的一个一元...
在JavaScript中,`typeof`操作符是一种非常重要的工具,用于确定变量或表达式的类型。`typeof`返回一个字符串,表示变量或表达式的数据类型。在JavaScript的`typeof`用法汇总中,我们可以看到它在不同情况下的行为。...
在JavaScript编程语言中,`typeof` 是一个非常重要的操作符,用于检测变量或表达式的类型。这段代码的核心在于使用 `typeof` 和三元运算符来判断传入参数 `id` 的类型,然后根据类型的不同执行不同的操作。让我们...
在JavaScript编程语言中,typeof运算符是一个非常重要的工具,它允许我们对一个表达式的类型进行检测,并返回表示该类型的数据类型字符串。该运算符通常用于我们需要确定一个变量或表达式的类型时,以便执行一些特定...
在JavaScript编程中,typeof运算符是用于确定未声明变量、已声明变量、字面量等表达式的类型的一个基本工具。它能够返回一个表示变量或表达式类型的字符串。typeof运算符非常重要,尤其是在进行类型检查和避免类型...
增强 javascript typeof 安装 这个模块是通过 npm 安装的: $ npm install simple-type 示例用法 var simpleType = require ( 'simple-type' ) ; simpleType ( [ 1 , 2 , 3 ] ) === 'array' // true simpleType ...
JavaScript中的`typeof`运算符是一种用于检测变量或表达式数据类型的内置工具。它返回一个表示该变量或表达式类型的字符串,比如"undefined"、"boolean"、"number"、"string"、"function"或"object"。然而,`typeof`...
今天写JS代码,遇到动态生成多个名称相同的input复选按钮 需要判断其是否是数组,用到了if (typeof(document.MapCheckMgr.checkid)!=undefined) 以前用得少,就顺便查了一下关于typeof的那些事 typeof用以获取一个...
在JavaScript中,`typeof`和`instanceof`是两种常用的类型检查操作符,它们都用于检测变量的类型,但有着不同的用法和返回结果。理解它们的区别对于编写健壮的JavaScript代码至关重要。 `typeof`是一个一元操作符,...
`typeof`是JavaScript中的一个运算符,它返回一个字符串,该字符串描述了运算数的类型。对于任何未声明的变量,`typeof`将返回字符串“undefined”。但值得注意的是,对于声明了但未赋值的变量,使用`typeof`也会...
综上所述,这段代码不仅是一个实用的JavaScript代码片段,也是对多个JavaScript核心概念的综合运用,包括三元运算符、`typeof`操作符、函数定义、标识符命名和相等性比较操作符。对于刚开始学习JavaScript的朋友来说...
在JavaScript中,`typeof`和`instanceof`都是用来检测变量类型的工具,但它们的用法和返回结果有所不同。理解这两个操作符的区别是编写健壮的JavaScript代码的关键。 `typeof`是一个一元运算符,其主要功能是确定...