Javascript 是否有一种对象类型在if块中同时返回false,并且可以向其添加属性并从中检索属性?

Javascript 是否有一种对象类型在if块中同时返回false,并且可以向其添加属性并从中检索属性?,javascript,prototypejs,Javascript,Prototypejs,我正试图为原型库的$selection函数编写一个故障保护 到目前为止,我已经用我自己的函数覆盖了$global,在$returningnull的情况下,它会将错误记录到数据库中,并返回一个虚拟元素,该元素由prototype扩展,这样您就可以对其运行操作了 这是为了防止由于尝试在null对象上运行元素方法而导致整个系统失败 我的解决方案的问题是,尽管它可能很狡猾和有用,但它返回虚拟div,因此在if语句中返回true。我有没有办法让它返回一个falsy值,这个值也可以通过原型进行扩展?我对任何

我正试图为原型库的$selection函数编写一个故障保护

到目前为止,我已经用我自己的函数覆盖了$global,在$returningnull的情况下,它会将错误记录到数据库中,并返回一个虚拟元素,该元素由prototype扩展,这样您就可以对其运行操作了

这是为了防止由于尝试在null对象上运行元素方法而导致整个系统失败


我的解决方案的问题是,尽管它可能很狡猾和有用,但它返回虚拟div,因此在if语句中返回true。我有没有办法让它返回一个falsy值,这个值也可以通过原型进行扩展?我对任何其他聪明的方法也持开放态度。

正如您可能已经知道的,Javascript使用以下命令转换为布尔值:

由于一般来说,任何对象的计算结果都是true,因此在我看来,实现您的要求的唯一方法是使用prototype.js元素函数的伪实现扩展String.prototype,然后从自定义$function返回空字符串。以下是总体思路:

<script src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js"></script>
<script>
Object.extend(String.prototype, {
 foo : function() { document.write('<br/>foo called') }
});

o = ""
if (o) { document.write('true') } else { document.write('false') }
o.foo()
</script>

不过这有点麻烦,因为您需要将这些函数添加到所有字符串中,而不仅仅是空字符串。另外,我不确定你是否真的能更好地屏蔽这个特殊对象的元素未发现问题。一种方法通常是更好的方法,因为它避免了细微的错误,而这些错误是从根本原因中去除的几个步骤。

改变$1的预期结果太危险了。如果要避免破坏现有脚本,请确保始终检查空值

if ($('element')) $('element').hide();
…或以更能容忍缺失元素的方式使用结果

$$('#element').invoke('hide');

可能的重复:诚然,像我所选择的方法是有点奇怪。良好的编码实践显然很重要,并且被视为重要实践,但有时很难抓住所有这些实践,尤其是在一个大型团队和庞大的代码库中。我对你投了反对票,因为虽然这是一个好的观点,但它并没有回答我的问题。谢谢!我不认为要以这种方式扩展对象类型。我考虑了字符串对象,但我试图用Element.extend来扩展它,而不是像这里这样做。好建议!至于你的最后一段,这肯定是我考虑过的事情,但由于这将避免用户反弹,并且我们得到丰富的错误报告的额外好处,这可能被证明是一个有价值的原因。不过我可能错了:P
if ($('element')) $('element').hide();
$$('#element').invoke('hide');