javascript如果声明问题

时间:2009-03-27 19:53:14

标签: javascript

function valid()
{
    begin_checked = false;
    end_checked = false;

    alert("begin_checked: " +begin_checked);
    alert("end_checked: " +end_checked);

    if (document.dd.begin.checked.length == undefined || document.dd.end.checked.length == undefined )
    {
        alert("In undefined");
    }

    alert("end");
}

当if语句为false时,它永远不会报警(“结束”)?如果是真的,它会正确执行。为什么?

3 个答案:

答案 0 :(得分:8)

可能存在空指针异常,并且您没有输出到浏览器的错误。

您需要检查一些输出:

alert(document);
alert(document.dd);
alert(document.dd.begin);
alert(document.dd.begin.checked);
alert(document.dd.end);
alert(document.dd.end.checked);

如果你从其中任何一个中得到未定义,那么你的代码将无法正常执行。

编辑:此外,这里的其他答案都有很好的信息。阅读这些内容。

Edit2:替代方案 - 在try / catch块中包围您的代码并提醒错误:

function valid(){

    try{
        begin_checked = false;
        end_checked = false;

        alert("begin_checked: " +begin_checked);
        alert("end_checked: " +end_checked);

        if (document.dd.begin.checked.length == undefined || document.dd.end.checked.length == undefined ){
            alert("In undefined");
        }

        alert("end");

    } catch (e) {
        alert(e);
    }

}

答案 1 :(得分:3)

您的浏览器错误控制台中是否有任何错误?我猜它是因为它试图评估一个不存在的属性,这导致它失败(永远不会到达== undefined)。您可以检查该属性是否存在,或使用typeof检查它是否未定义。

if (!document.dd.begin.checked.length || !document.dd.end.checked.length)
{
    alert("In undefined");
}

if (typeof document.dd.begin.checked.length == 'undefined' || typeof document.dd.end.checked.length == 'undefined' )
{
    alert("In undefined");
}

答案 2 :(得分:2)