【发布时间】:2012-03-19 03:42:15
【问题描述】:
我正在研究使用 jQuery 对象作为安全的解引用器,就像在 Groovy 中一样。我要解决的问题是我从可能没有我正在寻找的值的 AJAX 调用中检索 JSON。我想要一种方便的方法来检查我是否在尝试使用该值执行某些操作之前返回值。
对于非 Groovy 程序员,如果 Groovy 中的变量为 null,则调用它的方法会静默失败,而不是抛出空指针异常。
我可以像这样使用 jQuery 运算符从 null 变量中创建一个空对象:
var myvar
$(myvar).chainedfunc()
在这个例子中,chainedfunc 仍然会在空对象上执行。
如果原始值为空,有没有办法阻止chainedfunc执行?
我知道我可能不得不忍受在一个空对象上执行链式函数。
注意:
我将下面的想法记录下来,但我意识到逻辑是错误的。情况 1,对象为 null,在这种情况下没有类型,因此无法创建相同类型的新对象,情况 2 对象存在,在这种情况下我返回对象不变。不过,总体问题仍然有意义。
在这种情况下,如果原始值不是一个对象,而是一个数组,那么问题就变成了,因为我用它创建了一个对象,以避免出现 null 错误。对于这种情况,我有以下功能:
$.fn.safe = function(){
if (this.get(0)){
return this.get(0)
}
else return []
}
在这种情况下,我假设原件是一个数组。理想情况下,我希望能够确定原始类型并返回相同类型的空实例。
// this does not work because type is not a constructor
$.fn.safe = function(){
var type = typeof this.get(0)
return this.get(0) || new type()
}
【问题讨论】:
-
听起来像是law of the instrument 问题。
-
聪明。这就是我问的原因,一定有更好的方法。
标签: javascript jquery dereference