亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

microcosm1994 / 661人閱讀

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

今天在看廖雪峰大神的博客意外地發(fā)現(xiàn)javascript是不能用 "=="或"==="操作符直接比較兩個(gè)數(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包括兩個(gè)不同類型的值:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。

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

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

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

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

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

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

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

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

a1.toString() === a2.toString();
請(qǐng)不要使用這種方法!??!
這種方法在某些情況下是可行的,當(dāng)兩個(gè)數(shù)組的元素順序相同且元素都可以轉(zhuǎn)換成字符串的情況下確實(shí)可行。
這樣的代碼存有隱患,比如數(shù)字被轉(zhuǎn)換成字符串,數(shù)字“1”和字符串“1”會(huì)被認(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é),有不對(duì)的地方請(qǐng)指出。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/98112.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    dadong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

microcosm1994

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<