js中判斷Object、Array、Function等引用型別物件是否相等_javascript技巧
在迭代中,我們還要注意的是,物件或陣列中的元素可能是一個任意值——除了原始型別值、object、arrray外,這個值還可能是個方法、一個DOM物件或是window對象,可能你已經注意到了,有部分引用型別是不能進行迭代的,需要分支判斷,程式碼如下:
function compare(a,b){
var
pt = /undefined|number|string|boolean/,
fn = /^(functions*)(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
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

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

function是函數的意思,是一段具有特定功能的可重複使用的程式碼區塊,是程式的基本組成單元之一,可以接受輸入參數,執行特定的操作,並傳回結果,其目的是封裝一段可重複使用的程式碼,提高程式碼的可重複使用性和可維護性。

標題:C#中使用Array.Sort函數對陣列進行排序的範例正文:在C#中,陣列是一種常用的資料結構,經常需要對陣列進行排序運算。 C#提供了Array類,其中有Sort方法可以方便地對陣列進行排序。本文將示範如何使用C#中的Array.Sort函數對陣列進行排序,並提供具體的程式碼範例。首先,我們要先了解Array.Sort函數的基本用法。 Array.So

在本文中,我們將了解enumerate()函數以及Python中「enumerate()」函數的用途。什麼是enumerate()函數? Python的enumerate()函數接受資料集合作為參數並傳回一個枚舉物件。枚舉物件以鍵值對的形式傳回。 key是每個item對應的索引,value是items。語法enumerate(iterable,start)參數iterable-傳入的資料集合可以作為枚舉物件傳回,稱為iterablestart-顧名思義,枚舉物件的起始索引由start定義。如果我們忽

在PHP中,有許多強大的陣列函數可以讓陣列的操作更加方便和快速。當我們需要將兩個陣列拼成一個關聯數組時,可以使用PHP的array_combine函數來實現這一操作。這個函數其實是用來將一個陣列的鍵當作另一個陣列的值,合併成一個新的關聯數組。接下來,我們將會講解如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組。了解array_comb

MySQL.proc表的功能與功能詳解MySQL是一種流行的關係型資料庫管理系統,開發者在使用MySQL時常常會涉及到預存程序(StoredProcedure)的建立與管理。而MySQL.proc表則是一個非常重要的系統表,它儲存了資料庫中所有的預存程序的相關信息,包括預存程序的名稱、定義、參數等。在本文中,我們將詳細解釋MySQL.proc表的作用與功能

在進行PHP編程時,我們常常需要將數組合併。 PHP提供了array_merge()函數來完成數組合併的工作,但是當數組中存在相同的鍵時,函數會覆寫原來的值。為了解決這個問題,PHP在語言中還提供了一個array_merge_recursive()函數,該函數可以合併數組並保留相同鍵的值,使得程式的設計變得更加靈活。 array_merge

1.Object類別介紹Object是Java預設提供的一個類別。 Java裡面除了Object類,所有的類別都是存在繼承關係的。預設會繼承Object父類別。即所有類別的物件都可以使用Object的參考來接收。範例:使用Object接收所有類別的物件classPerson{}classStudent{}publicclassTest{publicstaticvoidmain(String[]args){function(newPerson());function(newStudent());}public

Object轉byte與byte轉Object今天實作如何從Object去轉為byte和如何從byte轉為Object。首先,定義一個類別student:packagecom.byteToObject;importjava.io.Serializable;publicclassstudentimplementsSerializable{privateintsid;privateStringname;publicintgetSid(){returnsid;}publicvoidsetSid(in
