[Javascript] 等於的運用 - ==和 ===的不同之處

[Javascript] 等於的運用 - ==和 ===的不同之處

前言

JS真的是很有意思的語言,它有一些自己的特性,不過早期以來JS最多是用在Browser裡面對DOM做處理,而每一個Browser對DOM的定義有些許不同,造成問題很多大家就怪是JS的錯。 不過近幾年越來越多人為JS正名,而JS的確是很特別的語言。

我最近有花一些時間看JS的基礎,希望能夠把它學好,畢竟它或許是世界上用的最多的語言(想想看有多少網站)。

裡面對於變數的等於判斷式

作為一個比較長於C#打交道的開發者,當要判斷兩個變數是否一致的時候,使用的都是兩個等號(==)。不過如果對JS比較熟悉的就會知道,JS不建議使用兩個等號而是建議使用三個等號 (===)。

一直以來我都沒有去找他們兩個的差別到底在那裡,現在我終於知道了:

兩個等於(==)會對被判別的變數做轉換型別的動作(coercion又稱為implicit type conversion)。這就是爲什麽有時候不懂一個語言特性會覺得怪怪的。舉例來說:


左邊是int type右邊是string type,但是因為兩個等於會把 string 轉型為int,所以實際比對是1 = 1所以是true。

如果是三個等於(===),那麼就不會有轉換型別的問題,因此1 === "1" //false就是false。

對於物件的等於判斷

和其他oo語言一樣,因為物件指向的都是某一個記憶體位置,所以如果直接把兩個object 做判別會等於false。


var b = {name: "hello"};
a === b; //false

特別的例子:NaN

NaN意思是:Not A Number,而他的Type其實是number。不過他比較特別是沒有任何數值可以和他相等,就算是NaN自己也不行。換句話說NaN === NaN //false

因此只能使用isNaN()這個Function來判別。

結論

其實這個特性相信瞭解JS的都清楚,不過我自己以前是知其然但不知其所以然,所以希望記錄下來。


Google+

創用 CC 授權條款
Alan Tsai 的隨手筆記Alan Tsai製作,以創用CC 姓名標示 4.0 國際 授權條款釋出。