某天,和某同事交流技術,他提到了一個問題:在js中,若是一個變量賦值給另外一個變量,那麼他們必定相等嗎?爲何?
。而後,我脫口而出,是相等,這無毛病。變量賦值自己就只是一個定義好的變量的副本,他們相等是沒問題的,即使是引用類型的數據對象,在賦值的時候保持着內存的同一引用,它們固然也相等啊。固然注意這裏是相等,不是全等。即"=="
而非"==="
,因此沒有什麼類型轉換的討論。不信,那咱們來兩個表明示例看看:學習
//基本類型 var a; var b = a; b == a;//true //引用類型 var a = {}; var b = a; b == a;//true,它們的引用地址相同
看起來好像是沒什麼問題的。然而事實真的是這樣嗎?spa
我轉念一想,不對啊,有這麼簡單的問題?同事再給我一個例子,狠狠的打擊了我,臥槽,還能夠這樣?code
js
數據當中還有一個特殊的值,那就是NaN
。對象
var a = NaN; var b = a; b == a;//猜猜這裏是啥
答案真的是出乎你的意料,固然是false
,也就是不相等啦。 blog
不帶這麼玩的吧?ip
後面腦殼一閃,原來如此,這麼低級的錯誤都犯,NaN
雖然是一個數值型的值,可是它並非一個確切的值,因此NaN !== NaN
。也就是說,變量的賦值也不會改變它們的不等性呢。內存
還能夠這麼玩。it
ps:
總結:任什麼時候候任何一個問題都不要小看它,拘束於表面,由於它隨時都會是一個坑,讓你跳進去,認真點總不會有壞處的。class
鄙人建立了一個QQ羣,供你們學習交流,但願和你們合做愉快,互相幫助,交流學習,如下爲羣二維碼:變量