Javascript变量为null,但是在if语句中

时间:2016-01-11 12:33:57

标签: javascript

我有一个奇怪的问题。我试图创造一个jsfiddle,但我没有得到相同的结果,所以我很抱歉,我无法分享更多我拥有的东西。

var parent = id && Number(oldParent) !== 1 ? $('#main_container #item_' + itemId).parent().parent().prev() : null;

这就是我得到父母的方式。在不需要时它应该为空。

后来,我在同一个函数中得到了这个检查:

if (parent && parent != null && !parent.hasClass('.main-group'));
{
    console.log(parent == null);
    var siblingCount = parent.next().children().length;

    if (siblingCount === 0)
    {
        parent.removeClass('group');
        parent.addClass('normal-item');
    }
}

因此,我检查父项是否已设置(以防万一),父项不为空且父项不具有类main-group。至少我认为这应该有效,但我得到了错误:

TypeError: parent is null

在这一行:

var siblingCount = parent.next().children().length;

因此,这就是我添加控制台日志以查看父级是否为空的原因。你猜怎么着? console.log说的是真的。这意味着parent等于null,但它仍然在if语句中。我用&&所以它不应该进入if语句,因为已经有一个操作是假的。

我让其他人看着它,但他们也无法弄明白。

2 个答案:

答案 0 :(得分:4)

最后有一个semicolan,当statement被终止,下一个语句executes时,它会被执行。

var parent = null;
if (parent && parent != null && !parent.hasClass('.main-group'));{
   alert("Hello");
}

对于Debin评论:

var parent = null;
if (parent != null); { alert("Vinoth") }

// The above one is equivalent:

if (parent != null) do nothing ;
alert ("hi");

JavaScript认为您有empty语句,其右侧的所有内容都被视为不再属于if条件,因此independent语句将其视为execute。< / p>

答案 1 :(得分:1)

你有一个“;”在这一行的最后

if (parent && parent != null && !parent.hasClass('.main-group'));

这就是导致问题的原因。