2010-10-14 57 views
2

現在是20:30,我經歷了一個6小時的bug追捕,其中包含一個未初始化的成員變量引起的惱人的bug。在javascript中未初始化成員變量的未定義行爲

在我們以前的版本中,我們不得不代碼接下來的幾行:

var aList = new Array; 
for (var iDx=0; iDx < nNumOfElements; iDx++) 
{ 
    // Some code 
    aList.nCount = someValue; //This line 
} 

aList.sort(function(a, b) { return b.nCount - a.nCount ; }); 

在過去的版本有人不小心刪除與註釋的行。 並且沒有其他的成員變量nCount的初始化。

我們的一些客戶得到了「數量預期」異常,這是非常明顯的(回想起來),奇怪的是這個錯誤並沒有重現與我們的Q.A.也沒有80%的客戶!

這怎麼可能?有沒有什麼嚴格的模式,我們可以運行,會發現這樣麻煩的錯誤?有什麼區別的客戶端得到例外和沒有(這不是瀏覽器版本和Windows版本)

(我們的系統只運行在IE6 +在一個特殊的容器,這使得我們很難寫代碼在正常的IDE我們幾乎都寫在記事本++)

回答

6

你寫了int而不是var。我一直這麼做......

int iDx=0應該是var iDx=0

順便說一下,你在用什麼編輯器? int是ES中的「未來保留字」,因此好的編輯可能會以醜陋的方式突出顯示它(gedit會默認爲紅色下劃線),以引起您的注意。

+1

哈哈,已經殺了我的JS – 2010-10-14 18:47:17

+0

這麼多次好奇,是JavaScript和Java混亂的一個原因? :P – BoltClock 2010-10-14 18:48:40

+0

我最近使用了一個'bool'。 :) – casablanca 2010-10-14 18:48:49

0

看起來這是一個IE6與數組排序相關的錯誤。

嘗試一些變通的建議here ...