99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

判斷JavaScript中的兩個變量是否相等的操作符-創新互聯

1、為什么要判斷?

成都創新互聯公司是專業的巴州網站建設公司,巴州接單;提供成都做網站、成都網站設計,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行巴州網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!

可能有些同學看到這個標題就會產生疑惑,為什么我們要判斷JavaScript中的兩個變量是否相等,JavaScript不是已經提供了雙等號“==”以及三等號“===”給我們使用了嗎?

其實,JavaScript雖然給我們提供了相等運算符,但是還是存在一些缺陷,這些缺陷不符合我們的思維習慣,有可能在使用的時候得到一些意外的結果。為了避免這種情況的出現,我們需要自己函數來實現JavaScript變量之間的對比。

2、JavaScript等號運算符存在哪些缺陷?

2.1 0與-0

在JavaScript中:

0 === 0
//true
+0 === -0
//true

相等運算符認為+0和-0是相等的,但是我們應當認為兩者是不等的,具體原因源碼中給出了一個鏈接:Harmony egal proposal.

2.2 null和undefined

在JavaScript中:

null == undefined
//true
null === undefined
//false

我們應當認為null不等于undefined,所以在比較null和undefined時,應當返回false。

2.3 NaN

前文有說過,NaN是一個特殊的值,它是JavaScript中唯一一個自身不等于自身的值。

NaN == NaN
//false
NaN === NaN
//false

但是我們在對比兩個NaN時,我們應當認為它們是相等的。

2.4 數組之間的對比

由于在JavaScript中,數組是一個對象,所以如果兩個變量不是引用的同一個數組的話,即使兩個數組一模一樣也不會返回true。

var a = [];
//undefined
var b = [];
//undefined
a=== b
//false
a==b
//false

但是我們應當認為,兩個元素位置、順序以及值相同的數組是相等的。

2.5 對象之間的對比

凡是涉及到對象的變量,只要不是引用同一個對象,都會被認為不相等。我們需要做出一些改變,兩個完全一致的對象應當被認為是相等的。

var a = {};
//undefined
var b = {};
//undefined
a == b
//false
a === b
//false

這種情況在所有JavaScript內置對象中也適用,比如我們應當認為兩個一樣的RegExp對象是相等的。

2.6 基本數據類型與包裝數據類型之間的對比

在JavaScript中,數值2和Number對象2是不嚴格相等的:

2 == new Number(2);
//true
2 === new Number(2);
//false

但是我們在對比2和new Number(2)時應當認為兩者相等。

3 underscore的實現方法

我們實現的方法當然還是依賴于JavaScript相等運算符的,只不過針對特例需要有特定的處理。我們在比較之前,首先應該做的就是處理特殊情況。

underscore的代碼中,沒有直接將邏輯寫在_.isEqual方法中,而是定義了兩個私有方法:eq和deepEq。在GitHub用戶@hanzichi的repo中,我們可以看到1.8.3版本的underscore中并沒有deepEq方法,為什么后來添加了呢?這是因為underscore的作者把一些特例的處理提取了出來,放到了eq方法中,而更加復雜的對象之間的對比被放到了deepEq中(同時使得deepEq方法更加便于遞歸調用)。這樣的做法使得代碼邏輯更加鮮明,方法的功能也更加單一明確,維護代碼更加簡潔快速。

eq方法的源代碼:

var eq = function (a, b, aStack, bStack) {
	// Identical objects are equal. `0 === -0`, but they aren't identical.
	// See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
	//除了0 === -0這個特例之外,其余所有a === b的例子都代表它們相等。
	//應當判斷0 !== -0,但是JavaScript中0 === -0。
	//下面這行代碼就是為了解決這個問題。
	//當a !== 0或者1/a === 1/b時返回true,一旦a === 0并且1/a !== 1/b就返回false。
	//而a === 0且1/a !== 1/b就代表a,b有一個為0,有一個為-0。
	if (a === b) return a !== 0 || 1 / a === 1 / b;
	//一旦a、b不嚴格相等,就進入后續檢測。
	//a == b成立但是a === b不成立的例子中需要排除null和undefined,其余例子需要后續判斷。
	// `null` or `undefined` only equal to itself (strict comparison).
	//一旦a或者b中有一個為null就代表另一個為undefined,這種情況可以直接排除。
	if (a == null || b == null) return false;
	// `NaN`s are equivalent, but non-reflexive.
	//自身不等于自身的情況,一旦a,b都為NaN,則可以返回true。
	if (a !== a) return b !== b;
	// Exhaust primitive checks
	//如果a,b都不為JavaScript對象,那么經過以上監測之后還不嚴格相等的話就可以直接斷定a不等于b。
	var type = typeof a;
	if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
	//如果a,b是JavaScript對象,還需要做后續深入的判斷。
	return deepEq(a, b, aStack, bStack);
};

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前名稱:判斷JavaScript中的兩個變量是否相等的操作符-創新互聯
轉載來源:http://www.yijiale78.com/article10/cdpgdo.html

成都網站建設公司_創新互聯,為您提供建站公司ChatGPT、電子商務用戶體驗網站收錄、全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化