在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ JS對(duì)象(數(shù)組)的復(fù)制疑問

JS對(duì)象(數(shù)組)的復(fù)制疑問

題目描述

《JavaScript權(quán)威指南》【3.7不可變的原始值和可變的對(duì)象引用】部分,提到

對(duì)象的比較并非值的比較:即使兩個(gè)對(duì)象包含同樣的屬性及相同的值,他們也是不相等的。

這個(gè)我覺得理解沒問題,因?yàn)椴皇窃谝粋€(gè)內(nèi)存里面,都是互相獨(dú)立的。給的示例:

var o={x:1},p={x:1}; //具有相同屬性的兩個(gè)對(duì)象
o===p //=>false:兩個(gè)單獨(dú)的對(duì)象永遠(yuǎn)不相等
var a=[],b=[];  //兩個(gè)單獨(dú)的空數(shù)組
a===b  //=>false; 兩個(gè)單獨(dú)的數(shù)組永不相等

數(shù)組也是對(duì)象,而且都是單獨(dú)聲明的。
但是到后面的一個(gè)函數(shù)我就困惑了:

function equalArrays(a,b){
    if(a.length!=b.length)return false;  //兩個(gè)長(zhǎng)度不同的數(shù)組不相等
    for(var i=0;i<a.length;i++){         //循環(huán)遍歷所有元素
        if(a[i]!==b[i]) return false;    //如果有任意元素不等,則數(shù)組不相等 
     return true;                         //否則他們相等
  }
}

對(duì)象相等應(yīng)該是對(duì)象標(biāo)識(shí)符的引用指向的是同一個(gè)內(nèi)存地址吧?
即使用“=”方式讓兩個(gè)對(duì)象相等。
上面的例子只是判斷了對(duì)象的“鍵值”對(duì)是一致的,不能證明a和b指向的是同一個(gè)內(nèi)存地址???

回答
編輯回答
萌二代
上面的例子只是判斷了對(duì)象的“鍵值”對(duì)是一致的,不能證明a和b指向的是同一個(gè)內(nèi)存地址???

是的,這個(gè)函數(shù)不能證明a和b是同一個(gè)內(nèi)存地址。這個(gè)函數(shù)的功能僅僅是判斷兩個(gè)數(shù)組的元素是否相等而已。

2018年7月12日 16:09
編輯回答
焚音

上文都說(shuō)了

兩個(gè)單獨(dú)的數(shù)組永不相等

而這段函數(shù)的作用是

如果我們想比較兩個(gè)單獨(dú)的對(duì)象或數(shù)組

這個(gè)比較就不是要比較2個(gè)對(duì)象是否指向同一個(gè)內(nèi)存了,而是要比較2個(gè)對(duì)象的屬性或元素是否一致。

實(shí)際編程中我們判斷2個(gè)數(shù)組或?qū)ο笫欠褚恢聵O少是為了要判斷是否指向同一內(nèi)存,大多數(shù)僅要判斷屬性或元素是否一致而已

2017年11月7日 12:02
編輯回答
朕略傻

就像書里面說(shuō)的對(duì)象的比較都是引用的比較,當(dāng)且僅當(dāng)他們引用同一個(gè)基對(duì)象的時(shí)候,他們才相等,這一點(diǎn)是毋庸置疑的,那么我們使用==以及===都可以判斷兩個(gè)數(shù)組是否相等,為什么還要用這個(gè)函數(shù)呢?

一個(gè)函數(shù)的具體作用要看他的運(yùn)行環(huán)境,同一個(gè)函數(shù)不同環(huán)境下產(chǎn)生的結(jié)果可能都是不同的。就拿equalArrays這個(gè)函數(shù)來(lái)說(shuō),看到他的代碼實(shí)現(xiàn),我們可以大致推斷出,這個(gè)函數(shù)的作用是判斷兩個(gè)數(shù)組的值是否相等,而不是用來(lái)判斷是否全等的。

2018年9月12日 13:36