顯然,這行代碼觸發「預期的對象」:這個「對象預期」的JavaScript錯誤是怎麼可能的?
var bPid = (b != null && typeof (b.processId) == "number") ? b.processId : 0;
不幸的是我無法通過代碼在調試器中的步驟,因爲這是一個間歇性錯誤,在Windows邊欄小工具,我展示了寫作。但是,我想有人應該能夠告訴我,如果我正在做的所有檢查嘗試阻止這樣的事情,甚至有可能獲得對象預期。
顯然,這行代碼觸發「預期的對象」:這個「對象預期」的JavaScript錯誤是怎麼可能的?
var bPid = (b != null && typeof (b.processId) == "number") ? b.processId : 0;
不幸的是我無法通過代碼在調試器中的步驟,因爲這是一個間歇性錯誤,在Windows邊欄小工具,我展示了寫作。但是,我想有人應該能夠告訴我,如果我正在做的所有檢查嘗試阻止這樣的事情,甚至有可能獲得對象預期。
您在致電b.processId
時未確定b
是否爲對象。
看來b
不是一個對象,所以我會alert(b)
之前,看看它是否被賦予一個值。
即使它有一個賦值,它可能不是一個對象,所以你不妨要求typeof(b) == 'object'
。
您的變量b可能不存在。試試這個:
var bPid = (typeof b != "undefined" && typeof b.processId == "number") ? b.processId : 0;
最安全(和最短)的方式來檢查,如果B變量是「truthy」(道格拉斯Crockford的條款)將
var bPid = (b && typeof (b.processId) == "number") ? b.processId : 0;
,除非你明確地想比較一下爲null(在這種情況下,你應該比較===不會執行類型轉換)。
而且'truthy'變量是除false,null,undefined,NaN,數字0或空字符串以外的任何變量。
不應該'typeof(b.processId)==「number」'阻止我在調用'b.processId'中例如,「b = 3」? – Domenic 2009-11-05 16:29:55
詢問'typeof(b.processId)'使得JavaScript評估'b.processId'。如果'b'爲數字3,則會導致''未定義''。如果'b'本身就是'undefined',則會導致錯誤。 – Tomalak 2009-11-05 16:33:05
我的印象是'typeof'的整點是讓你測試一些屬性是否存在而不實際取消引用。但是,Firebug同意typeof(undefined.processId)給出了一個錯誤,所以我猜不是> _ <。 – Domenic 2009-11-05 16:33:44