typeof jQuery.data()buggy?

时间:2010-11-22 13:35:15

标签: javascript jquery

我正在跟踪代码中的一个神秘问题。这个“错误”发生在event handler内,该.delegate()通过jQuery的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),如果没有,则创建它。似乎undefined以我无法描述的方式失败。如果附加了像Firebug这样的调试器,它会正确评估.wf_id并且一切正常,没有调试器,if(!$.data(parent_row_element, 'changed') ) $.data(parent_row_element, 'changed', {}); 的赋值总是抛出,因为对象未定义,因为它没有被创建。

如果我使用这句话,它的效果非常好:

{{1}}

这就是为什么我猜这是一个错误。或者我忽略了什么?

我可以重现这种行为:

在点击时抛出错误,使用了typeof
http://www.jsfiddle.net/5cEVf/

工作正常,没有类型
http://www.jsfiddle.net/5cEVf/3/

2 个答案:

答案 0 :(得分:3)

升级到1.4.2并且已修复。

如果您提醒typeof的结果,则会在1.4.2中获得object

答案 1 :(得分:1)

问题是该值设置为null,null是一个对象。

因此typeof返回'object'使if失败,并且由于该对象为null,因此也无法分配新属性。