摘要:今天在看廖雪峰大神的博客意外地發現是不能用或操作符直接比較兩個數組是否相等的。目前沒有內置的操作符判斷對象的內容是否相同。另外一種方法判斷數組的長度循環遍歷數組的值進行比較以上就是我的總結,有不對的地方請指出。
今天在看廖雪峰大神的博客意外地發現javascript是不能用 "=="或"==="操作符直接比較兩個數組是否相等的。
先看案例:
var a = [1,2,3,4,5]; var b = a.slice(); console.log(a); // [1,2,3,4,5] console.log(b); // [1,2,3,4,5] console.log(a === b); // false console.log(a == b); // false console.log([] == []); // false console.log( [] === []); // false為什么都輸出false呢?先弄清楚以下幾點:
javascript包括兩個不同類型的值:基本數據類型和引用數據類型。
基本數據類型指的是簡單的數據段,引用數據類型指的是有多個值構成的對象。
常見的基本數據類型:Number、String 、Boolean、Null和Undefined。
var a = 10; var b = a; b = 20; console.log(a); // 10
上面b獲取的是a值的一份拷貝,雖然兩個變量的值相等,但是兩個變量保存了兩個不同的基本數據類型值。b只是保存了a賦值的一個副本,所以,b的改變,對a沒有影響。
引用類型數據:也就是對象類型Object type,比如:Object、Array、Function、Data等。javascript的引用數據類型是保存在堆內存中的對象。
講到這里應該理解為什么輸出的是false了:因為數組是兌現,==或===操作符只能比較兩個對象是否是同一個實例,也就是是否是同一個對象引用。目前JavaScript沒有內置的操作符判斷對象的內容是否相同。
那么該如何去判斷數組是否相等呢?有一種做法是將數組轉換成字符串:
JSON.stringify(a1) === JSON.stringify(a2)
或
a1.toString() === a2.toString();
請不要使用這種方法!!!
這種方法在某些情況下是可行的,當兩個數組的元素順序相同且元素都可以轉換成字符串的情況下確實可行。
這樣的代碼存有隱患,比如數字被轉換成字符串,數字“1”和字符串“1”會被認為相等,可能造成調試困難,不推薦使用。
另外一種方法:
function equar(a, b) { // 判斷數組的長度 if (a.length !== b.length) { return false } else { // 循環遍歷數組的值進行比較 for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) { return false } } return true; } } var s = equar([1, "2", 3], [1, 2, 3]); var t = equar([1, 2, 3], [1, 2, 3]); console.log(s); // false console.log(t); // true
以上就是我的總結,有不對的地方請指出。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98112.html
摘要:本章將介紹基本的數據結構。松鼠人一般在晚上八點到十點之間,雅克就會變身成為一只毛茸茸的松鼠,尾巴上的毛十分濃密。我們將雅克的日記表示為對象數組。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項目原文:Data Structures: Objects and Arrays 譯者:飛龍 協議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《Jav...
摘要:數值類型引用類型有種通過復制數值傳值的數據類型。我們稱之為原始基本數據類型還有三種通過引用傳值的數據類型。當等式運算符和用于引用型變量時,他們會檢查引用。這是中的地方在內存中的映射包含了函數的引用,其他變量則包含基本數據類型的數據。 本文旨在了解如何復制對象、數組和函數以及如何將它們傳遞到函數中。知道引用類型復制的是什么。了解原始值是通過復制值來復制及傳遞的。 數值類型 & 引用類型 ...
摘要:最近開始看源碼,并將源碼解讀放在了我的計劃中。后文中均假設比較的兩個參數為和。,如果和均是類型或者類型,我們可以用來判斷是否。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像和一個個大師對話,你會學到很多。為什么是 underscore?最主要的原...
摘要:如果有一方是布爾值,則轉換為,轉換為,再進行判斷。等同運算符類型不同返回類型相同如果同為數字字符串則比較值如果同為布爾值,相同則為不同為如果兩個操作數同為引用類型,且引用的為同一個對象函數,數組,則相同。 本文主要記錄平時開發遇到的知識點和小技巧 相等判斷(==) 類型相同: 判斷其值是否相同 類型不同: 1. 如果數字和字符串比較, 則字符串會被隱式轉換為數字,在做判斷。 2....
閱讀 2328·2021-11-22 14:56
閱讀 1460·2021-09-24 09:47
閱讀 904·2019-08-26 18:37
閱讀 2818·2019-08-26 12:10
閱讀 1522·2019-08-26 11:55
閱讀 3140·2019-08-23 18:07
閱讀 2294·2019-08-23 14:08
閱讀 605·2019-08-23 12:12