object 本來就不能這樣比
array 也是一樣
object 的話
你可以去檢查他的 key: value
是否相同
然後盡量用 !==
來比較
!==
會去比兩者的 type 跟 value 是否相同
e.g.
0 == '0'; // true
0 === '0' // false
同理 ===
引用 Kuro大大的名言:
來看看各種莫名其妙的比較判斷:
false == 0 // true
true == 1 // true
[] == [] // false
[] == ![] // true
[] == '' // true
[] == 0 // true
[''] == '' // true
[0] == 0 // true
[0] == '' // false
[''] == 0 // true
null == undefined // true
[null] == '' // true
[null] == 0 // true
[undefined] == '' // true
[undefined] == 0 // true
看完還覺得 JavaScript 如此貼心嗎? 是噁心吧
「JavaScript 我真是猜不透你啊~」
哈哈哈哈哈哈哈哈 (壞掉惹
提供個只檢查object value是否相同的方法好了。
Object.prototype.equals = function(o1, o2){
function _isObject(item){
return (typeof item === "object" && !Array.isArray(item) && item !== null)
}
if (_isObject(o1) && _isObject(o2)) {
let e1 = Object.entries(o1).sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
let e2 = Object.entries(o2).sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
return e1.toString() === e2.toString()
}
return false
}
Object.equals({a:1, b:2}, {b:2, a:1}) // true
我JS寫到現在我也放棄理解了,反正遇到覺得一定會踩坑的地方就先查一下。XD
簡單明白的說明。一個是null。一個是obj
所以null!=obj。當然為真了。
至於為何它會是null
因為變數定義,未定義前永遠為null。
但後面是屬於給定值。所以為obj。
以上簡單的說明是否能明白。
簡單明白的說明。一個是null。一個是obj
所以null!=obj。當然為真了。
至於為何它會是null
因為變數定義,未定義前永遠為null。
但後面是屬於給定值。所以為obj。
let a = {};
let b = {};
console.log(a != b); // true
可是這樣也是一樣耶
這是我的理解,有可能有錯,因為我啃不下「你不知道的javascript」:
還是用這篇回答
https://ithelp.ithome.com.tw/questions/10193813
mutable type在儲存中就是記憶體位址,你分配出去的兩個位址不可能相同,除非你指派另一個別名。
{} == {}就是產生了兩個object去比較,比較的對象是所分配的記憶體位址,當然就是false。
佛祖的教誨:兩個object literal產生兩個不同的object,這結果應該很合理才對XD
應該就是在說我這回答。超精湛的。XD
然後「你不知道的javascript」如果讀到通真的會對瞭解JS幫助很大。只是我真的讀不通...Orz
mutable type在儲存中就是記憶體位址,你分配出去的兩個位址不可能相同,除非你指派另一個別名。
看起來就是這樣了XD
然後「你不知道的javascript」如果讀到通真的會對瞭解JS幫助很大
推坑大成功
我都想買來看了
不過好像分成 上中下
突然發現作者有出免費電子書
其實我只是用行為來解釋。不是用學術來解式。
在javascript來說。一但發生無法推斷的類型。就會用它的意思去做解釋。
說用定址的方式也對。但我比較喜歡用null=obj的說法。
要真的說比較複雜的說法。就是空值的定義在javascript區分太多定義了。
而左邊的定義空值與右邊的定差空值各自不一樣。
就會發生這樣的事。
js 真的很玄...
觀念錯誤,
首先,這就是一個典型考Memory ref比對的問題,樓主的進入點就錯了。
再來,未宣告未定義,既不是undefined更不是null,這點很重要,null是特別去assign才會有的一個特殊值
這是一種小說式的講解。學術上的說法確實是定址定值的方式不同。導致類型解釋的不同。
用比較單純的說法。一但有值的情況下。就不會發生這樣的事。其原因也很單純就是定值的問題。
真正要說的話,這並不是單純的Memory ref。
可是要解釋起來會有太多學術上的說明。一般初學者來說。在對於電子位能式及位數進位補位的相關理念不同。解釋出來會更麻煩。
我不會說我說的對,我只是用小說式的說法。來讓初學者明白一點。
認真來說,想要真心研究的人,自然就明白我說的不完全對。
但對初學者而言,只要懂這樣就行了。解釋太複雜反而會更不明白。