jquery 隐藏简单的 javascript 错误
我在 chrome 和 firefox 中使用 jQuery 和 flot。 当我处理代码时,我发现执行在一些愚蠢的事情上会默默失败,例如访问不存在的哈希结构等。
感觉 jQuery 中有一些 try {} catch {} 逻辑,让我看不到任何错误。
有没有关于如何解决这个问题而不需要大刀阔斧地隔离简单错误的地方的指示?
jshint 并没有太大帮助。
--edit--
更多调试显示了趋势。
我基本上是在发现拼写错误(未定义的变量)和在对象属性存在之前过早获取它们。使用 .hasOwnProperty() 有帮助,但很麻烦。我想我在某个地方看到了一个方便的实用程序,可以帮助简洁地测试深层结构。
I'm using jQuery and flot in chrome and firefox.
As I work on my code, I find that execution silently fails on stupid stuff like accessing non-existent hash structures and the like.
It feels like there is some try {} catch {} logic within jQuery that keeps me from seeing any errors.
Any pointers on how to get around this without blanket hack-n-slash to isolate where a simple bug is?
jshint hasn't been too helpful.
--edit--
more debugging shows a trend.
I'm basically finding typos (undefined variables) and premature fetching of object properties before they exist. Using .hasOwnProperty() has helped but is cumbersome. I think I saw a handy utility someplace to help test deep structures succinctly.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
.length
是你调试 jQuery 时的朋友。因为即使:在 JavaScript 中将返回
null
,使用 jQuery 选择器也会返回一个对象并强制转换true
:这意味着:
可能不会抛出错误,因此您将很难知道链中哪些内容“不起作用”。
然而,检查对象长度是有效的:
jQuery 被设计为默默地失败,因为它的核心用例之一是链接。如果选择器或原型方法在链中返回 null 或 false,则使用 jQuery 会比大多数缺乏经验的程序员所希望的更频繁地抛出空引用错误。
更新
如果处于调试模式,您可以通过修改原型来进行自己的调试。我尝试了这个:
现在,每当我调用“隐藏”时,如果链中没有元素,它会警告我:
Fiddle: http://jsfiddle.net/B4XQx/
.length
is your friend when debugging jQuery. Because even if:will return
null
in JavaScript, using a jQuery selector will return an object and casttrue
:Which means that:
Will probably not throw errors, so you will have a hard time knowing what "didn’t work" in the chain.
However, checking the object length works:
jQuery is designed to fail silently, since one of it’s core use cases is chaining. And if selectors or prototype methods would return null or false in the chain, using jQuery would throw null-reference errors more often than most inexperienced programmers would want.
Update
You can probably do your own debugging by modifying the prototypes if in debug mode. I tried this:
Now, whenever I call 'hide', it will warn me if there are no elements in the chain:
Fiddle: http://jsfiddle.net/B4XQx/
这里有解决方法:
空选择器上的 jQuery 错误
但我怀疑这真的是你想要的-
there's the workaround here:
jQuery error on null selector
but I doubt that's really what you want-