这些jQuery元素测试完全不必要吗?

har*_*rpo 3 jquery

在重构此代码之前,只需进行实际检查.据我所知,它来自一个有能力的人.这是一个示例:

// remove line at the latest list
if($(".extra-space").length > 0) {
    $(".extra-space li:last").addClass("noborder");
}

// select all
if($(".extra-select-all").length > 0) {
    $(".extra-select-all").click(function() {
        if($(this).attr("checked") == true) $(".extra-select-item").attr("checked","checked");
        else $(".extra-select-item").removeAttr("checked");
    });
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道这种模式背后的基本原理,还是只是无知if包装是不必要的?

// remove line at the latest list
$(".extra-space li:last").addClass("noborder");

// select all
$(".extra-select-all").click(function() {
    if($(this).attr("checked") == true) $(".extra-select-item").attr("checked","checked");
    else $(".extra-select-item").removeAttr("checked");
});
Run Code Online (Sandbox Code Playgroud)

med*_*iev 5

从编程上讲它是有道理的,因为这些元素不可能存在并且返回的数组可能有一定长度0,但由于jQuery适用于设计人员和非程序员,它会自动处理对不存在元素的调用,这意味着您不需要这些检查,因为jQuery尽可能虚拟.

$('microsoft').addClass('sucks')完全有效,因为返回的jquery obj有一个addClass它继承的方法,无论是否有元素,该方法都会执行.

注意:我只说纯jQuery方法.如果执行的方法是自定义插件或甚至是另一个答案中指定的UI插件,则行为可能与核心不同,在这种情况下,检查.length

就个人而言,我总是会检查,.length因为这意味着如果重构发生在后面的话会减少模糊和猜测,如果神秘的错误开始出现,我的错误检查将节省调试时间.