我正在跟蹤我的代碼中的一個神祕問題。這個「錯誤」情況,其通過jQuery的.delegate()
結合的event handler
內:typeof jQuery.data()越野車?
my.$table_body.delegate('.wf-dropdown', 'change', function(e){
parent_row_element = $(e.target).closest('tr')[0];
if(typeof $.data(parent_row_element, 'changed') == 'undefined')
$.data(parent_row_element, 'changed', {});
$.data(parent_row_element, 'changed').wf_id = e.target.value;
// .. more code
});
你並不需要知道其中的一些變量的定義,他們是爲了什麼,神祕的事情發生在檢查值爲undefined
。 我明確檢查是否已經有一個對象附加到parent_row_element
,如果沒有,創建它。好像typeof $.data(anything)
以我無法真正描述的方式失敗。如果連接了像Firebug這樣的調試器,則它的計算結果爲undefined
,並且一切工作正常,沒有調試器,因爲對象未定義,所以始終拋出.wf_id
,因爲它沒有創建。
它完美,如果我用這個語句:
if(!$.data(parent_row_element, 'changed'))
$.data(parent_row_element, 'changed', {});
這就是爲什麼我想,這是一個錯誤。還是我忽略了一些東西?
我能重現此問題:
拋出上點擊了錯誤的typeof用於
http://www.jsfiddle.net/5cEVf/
工作正常,沒有typeof運算
http://www.jsfiddle.net/5cEVf/3/
你在這裏使用'=='而不是'==='使用可怕的領域。 (噢等待它的「typeof」結果 - 沒關係) – Pointy 2010-11-22 13:37:43
@Pointy:我不這麼認爲?在調試模式下,'=='不應該成爲一個問題,無論如何'=='和'==='評估爲'true'。 – jAndy 2010-11-22 13:40:01
爲什麼不''警告'typeof'的結果,所以你可以看到沒有使用調試器會發生什麼。 – 2010-11-22 13:40:10