鍍金池/ 問答/HTML/ js 變量賦值

js 變量賦值

寫js的時候遇到一個問題,使用$post獲取的返回值,設(shè)為data.menu,是個數(shù)組
另有變量ab,

var i
for (i = 0; i < data.menu.length; i++) {
  this.a[i] = data.menu[i]
}
this.b = data.menu

(這是我在.vue文件中的寫法,ab均是data中定義的空數(shù)組,故使用this.)
結(jié)果這兩種方式得到的結(jié)果不同,在使用上也不同,只有b可以正常使用(作為變量傳入component中)
在作比較時,若是使用if (a[0].data1 === b[0].data1)if (a[0] === b[0])等方式比較數(shù)組元素或內(nèi)部值,結(jié)果為true,
但是直接比較if (a === b)卻為false,不知何解

回答
編輯回答
陌離殤

a和b都是引用類型, ===的時候會比較他們引用地址, 循環(huán)賦值a的時候?qū)儆谏羁截?所以為false

2017年7月15日 10:43
編輯回答
安若晴

js不能直接用==或者===來判斷兩個數(shù)組是否相等,無論是相等還是全等都不行,都會返回false,要判斷JS中的兩個數(shù)組是否相同,需要先將數(shù)組轉(zhuǎn)換為字符串,再作比較。

2017年5月21日 21:47
編輯回答
夢囈

[]===[]為false,了解一下

2017年2月21日 04:14
編輯回答
淺時光

你的a是循環(huán)出來的,說明a始終只等于最后一組數(shù)據(jù)。而b是整組數(shù)據(jù)。你前面的比較會相等,只能說明你判斷的那兩個值就是相等的。
if (a[0].data1 === b[0].data1),if (a[0] === b[0])這里比較的都是具體的值
if (a === b)這里比較的是整個數(shù)據(jù),而a只是最后一個i,b是所有的數(shù)據(jù)

2018年3月15日 00:22
編輯回答
放開她

對象是引用類型,不是同一個引用的對象不相等

2018年6月14日 00:03
編輯回答
兔寶寶

當a[i]=menu[i]的時候,a[i]指針指向menu[i],但a仍然指向初始化時的數(shù)組并不是menu,而b賦值后指針直接指向menu對應(yīng)的數(shù)組

2017年5月8日 11:38
編輯回答
別逞強

很明顯啊,javascript數(shù)組不能直接比較是否相等。

2017年3月20日 02:49