2010年8月24日 星期二

在 JavaScript 裡,知道 === 與 == 的區別嗎?

印象中,以前有遇過這問題,但當下認為他們是一樣的,所以也就沒有很認真去區分他們間的差別。但今天在看 jQuery 的原始碼時,發現這些老外都喜歡用 ===  而不用 ==,難到,真的只是因為老外比較長這原因而已嗎?

而我在 devguru 找到老外比較長的原因了。

一般在寫 JavaScript 時,我們「等號運算子(==)」的左右兩邊,你可能偶而會發現,如果有一個變數,他的值是整數,但如果在等號運算子的另一邊用字串來比較,有可能會通過。舉個例子來說:

var v=5;
if ( v=="5")
  alert('the same');
else
  alert('not the same');

這程式執行的結果,會跑出 「the same」出來。原因是你使用 == 運算子時,他會試圖自動去幫你作轉型的動作,以符合懶人的期望。但這一懶,卻也跑出了些潛在的問題。

第一,雖然程式幫你作了自動轉型來比較,但你可能已經誤用或誤會了這個變數他原本所宣告的變數型態,現在他包容了你,但不保證當你的程式變肥之後,日後在型態處理上吃了一記悶棍。

第二,是效能問題。如果要讓程式去幫你作自動轉型的動作,則他必須要多花一些額外的時間將所有型態一一去跟你目前的變數比較,這動作會比你一開始就直接講明兩邊都是要同樣型態會來得花時間。

所以,如果要讓自己程式寫得嚴謹,使用嚴格的等號運算子(===)是比較建議的。而他的雙胞胎兄弟,則是 !==,就請大家自個兒舉一反三了。

個人在 stackoverflow 論壇看到一篇很詳盡的介紹,很推薦去看他那篇說明,或找關鍵字 strict equal operator 搜尋更多其他文章。

參考:
01:http://www.devguru.com/Technologies/ecmascript/quickref/comparison_operators.html
02:http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use
03:http://www.webreference.com/js/column26/stricteq.html

沒有留言:

張貼留言