成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript比較兩個數(shù)組的內(nèi)容是否相同

microcosm1994 / 611人閱讀

摘要:今天在看廖雪峰大神的博客意外地發(fā)現(xiàn)是不能用或操作符直接比較兩個數(shù)組是否相等的。目前沒有內(nèi)置的操作符判斷對象的內(nèi)容是否相同。另外一種方法判斷數(shù)組的長度循環(huán)遍歷數(shù)組的值進(jìn)行比較以上就是我的總結(jié),有不對的地方請指出。

今天在看廖雪峰大神的博客意外地發(fā)現(xiàn)javascript是不能用 "=="或"==="操作符直接比較兩個數(shù)組是否相等的。

先看案例:

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呢?先弄清楚以下幾點(diǎn):

javascript包括兩個不同類型的值:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。

基本數(shù)據(jù)類型指的是簡單的數(shù)據(jù)段,引用數(shù)據(jù)類型指的是有多個值構(gòu)成的對象。

常見的基本數(shù)據(jù)類型:Number、String 、Boolean、Null和Undefined。

var a = 10;
var b = a;
b = 20;
console.log(a);  //  10

上面b獲取的是a值的一份拷貝,雖然兩個變量的值相等,但是兩個變量保存了兩個不同的基本數(shù)據(jù)類型值。b只是保存了a賦值的一個副本,所以,b的改變,對a沒有影響。

引用類型數(shù)據(jù):也就是對象類型Object type,比如:Object、Array、Function、Data等。javascript的引用數(shù)據(jù)類型是保存在堆內(nèi)存中的對象。

講到這里應(yīng)該理解為什么輸出的是false了:因為數(shù)組是兌現(xiàn),==或===操作符只能比較兩個對象是否是同一個實例,也就是是否是同一個對象引用。目前JavaScript沒有內(nèi)置的操作符判斷對象的內(nèi)容是否相同。

那么該如何去判斷數(shù)組是否相等呢?

有一種做法是將數(shù)組轉(zhuǎn)換成字符串:
JSON.stringify(a1) === JSON.stringify(a2)

a1.toString() === a2.toString();
請不要使用這種方法?。。?/strong>
這種方法在某些情況下是可行的,當(dāng)兩個數(shù)組的元素順序相同且元素都可以轉(zhuǎn)換成字符串的情況下確實可行。
這樣的代碼存有隱患,比如數(shù)字被轉(zhuǎn)換成字符串,數(shù)字“1”和字符串“1”會被認(rèn)為相等,可能造成調(diào)試?yán)щy,不推薦使用。

另外一種方法:

function equar(a, b) {
    // 判斷數(shù)組的長度
    if (a.length !== b.length) {
        return false
    } else {
        // 循環(huán)遍歷數(shù)組的值進(jìn)行比較
        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

以上就是我的總結(jié),有不對的地方請指出。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98112.html

相關(guān)文章

  • JavaScript 編程精解 中文第三版 四、數(shù)據(jù)結(jié)構(gòu):對象和數(shù)組

    摘要:本章將介紹基本的數(shù)據(jù)結(jié)構(gòu)。松鼠人一般在晚上八點(diǎn)到十點(diǎn)之間,雅克就會變身成為一只毛茸茸的松鼠,尾巴上的毛十分濃密。我們將雅克的日記表示為對象數(shù)組。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項目原文:Data Structures: Objects and Arrays 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《Jav...

    kamushin233 評論0 收藏0
  • js面試題(下)

    摘要:短路運(yùn)算返回值是什么又稱為短路或,短路如果左側(cè)為真,則不再進(jìn)行右側(cè)運(yùn)算,同時返回左側(cè)表達(dá)式運(yùn)算結(jié)果。上面是不存在的,所有結(jié)果為,轉(zhuǎn)成就是,那么就會運(yùn)算,把賦值給的同時,返回值也是,所以打印返回結(jié)果是函數(shù)內(nèi)部變量有哪些 DOM元素e的e.getAttribute(propName)和e.propName有什么區(qū)別和聯(lián)系 e.getAttribute(),是標(biāo)準(zhǔn)DOM操作文檔元素屬性的方...

    zhoutao 評論0 收藏0
  • 數(shù)值類型vs引用類型

    摘要:數(shù)值類型引用類型有種通過復(fù)制數(shù)值傳值的數(shù)據(jù)類型。我們稱之為原始基本數(shù)據(jù)類型還有三種通過引用傳值的數(shù)據(jù)類型。當(dāng)?shù)仁竭\(yùn)算符和用于引用型變量時,他們會檢查引用。這是中的地方在內(nèi)存中的映射包含了函數(shù)的引用,其他變量則包含基本數(shù)據(jù)類型的數(shù)據(jù)。 本文旨在了解如何復(fù)制對象、數(shù)組和函數(shù)以及如何將它們傳遞到函數(shù)中。知道引用類型復(fù)制的是什么。了解原始值是通過復(fù)制值來復(fù)制及傳遞的。 數(shù)值類型 & 引用類型 ...

    missonce 評論0 收藏0
  • 【underscore 源碼解讀】JavaScript 中如何判斷兩個元素是否 "相同&q

    摘要:最近開始看源碼,并將源碼解讀放在了我的計劃中。后文中均假設(shè)比較的兩個參數(shù)為和。,如果和均是類型或者類型,我們可以用來判斷是否。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像和一個個大師對話,你會學(xué)到很多。為什么是 underscore?最主要的原...

    yhaolpz 評論0 收藏0
  • JS基礎(chǔ)之常用小技巧和知識總結(jié)(一)

    摘要:如果有一方是布爾值,則轉(zhuǎn)換為,轉(zhuǎn)換為,再進(jìn)行判斷。等同運(yùn)算符類型不同返回類型相同如果同為數(shù)字字符串則比較值如果同為布爾值,相同則為不同為如果兩個操作數(shù)同為引用類型,且引用的為同一個對象函數(shù),數(shù)組,則相同。 本文主要記錄平時開發(fā)遇到的知識點(diǎn)和小技巧 相等判斷(==) 類型相同: 判斷其值是否相同 類型不同: 1. 如果數(shù)字和字符串比較, 則字符串會被隱式轉(zhuǎn)換為數(shù)字,在做判斷。 2....

    dadong 評論0 收藏0

發(fā)表評論

0條評論

microcosm1994

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<