初学ASP啊,但今天遇到一个很郁闷的问题,代码如下:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<title>欢迎</title>
</head><body>
<%
var userID=Request.Form("userID");
var passwd=Request.Form("passwd");if(userID===undefined || passwd===undefined)
{
    Response.Redirect("demo.html");
}else
{
    Response.Write("欢迎您 "+userID);
    Response.Write("您的密码是:"+passwd);
}
%>
</body>
</html>在这里,为什么浏览器中现实的是欢迎您 undefined您的密码是:undefined 这究竟是为什么呢?
这里userID究竟是undefined还是null还是其他什么?
如果不是 undefined 那么为什么打出来的是,如果是,为什么if语句里面进不去 !!!
郁卒啊,找了好多资料,但这个问题还是不懂 !!!求解答啊各位大大们~~~

解决方案 »

  1.   

    调试是基本功。你这样试试:
    <%
    var userID=Request.Form("userID");
    var passwd=Request.Form("passwd");
    //当你不确定究竟是undefined还是null还是其他什么的时候,不妨把你怀疑的几种情况输出来看看:
    Response.Write((userID==undefined)+"<br>");
    Response.Write((userID==null)+"<br>");
    Response.Write((userID=='')+"<br>");
    Response.End();
    if(userID===undefined || passwd===undefined)
    {
        Response.Redirect("demo.html");
    }else
    {
        Response.Write("欢迎您 "+userID);
        Response.Write("您的密码是:"+passwd);
    }
    %>
      

  2.   

    我觉得看到Bug高兴才对,调试改错的过程就是进步的过程。像你这样没耐心的我觉得还是别搞编程的好
      

  3.   


    谢谢,今早爬起来再看了下<%
    var userID=Request.Form("userID");
    var passwd=Request.Form("passwd");Response.Write(userID=="undefined");
    Response.Write("<br>");
    Response.Write("为什么会这样子?");
    Response.Write("<br>");
    Response.Write(userID==undefined);
    Response.Write("<br>");
    Response.Write("为什么会这样子?");
    Response.Write("<br>");
    Response.Write(userID===undefined);
    Response.Write("<br>");
    Response.Write("为什么会这样子?");
    Response.Write("<br>");
    Response.Write(userID==null);
    Response.Write("<br>");
    Response.Write("为什么会这样子?");
    Response.Write("<br>");
    Response.Write(userID=='');
    Response.Write("<br>");
    Response.Write("为什么会这样子?");
    Response.Write("<br>");
    Response.Write("欢迎您 "+userID);
    Response.Write("您的密码是:"+passwd);Response.End();
    %>
    结果如下啊:
    False
    为什么会这样子?
    False
    为什么会这样子?
    False
    为什么会这样子?
    False
    为什么会这样子?
    False
    为什么会这样子?
    欢迎您 undefined您的密码是:undefined
      

  4.   

    var userID=Request.Form("userID");
    var passwd=Request.Form("passwd");
    先输出参数:
    Response.Write(userID+"<br>");
    Response.Write(passwd+"<br>");

    //当你不确定究竟是undefined还是null还是其他什么的时候,不妨把你怀疑的几种情况输出来看看:
    Response.Write((userID==undefined)+"<br>");
    Response.Write((userID==null)+"<br>");
    Response.Write((userID=='')+"<br>");
    Response.End();
      

  5.   

    == 会自动转换类型的。
    false == null == 0 ==undefined == '' 都是true
    如果一定要判断类型 用 ===
    另外 javascript里面所有对象中不存在或者没有定义的属性,或者var声明了但是没有赋值的变量 值都是undefined。
    比如 
    var obj = new Object();
    Response.Write(obj.sfsdjlfkjslkaf);  // 是undefined
    而不存在的对象(即object)是null(typeof null 是object)
      

  6.   

    var userID=Request.Form("userID");
    var passwd=Request.Form("passwd");if(userID.Count==0 || passwd.Count==0) {
        Response.Redirect("demo.html");
    } else {
        Response.Write("欢迎您 "+userID);
        Response.Write("您的密码是:"+passwd);
    }不管是否有 userID 参数传入,  Request.From("userID") 都不会是 undefined, 也不是 null它是一个 StringList.
    ---------------------------------
    取其 Item 属性的值才是字符串类型
    var strUserID = Request.Form("userID").Item;
    var strPasswd=Request.Form("passwd").Item;if(strUserID.Count===undefined || strPasswd===undefined) {
        Response.Redirect("demo.html");
    } else {
        Response.Write("欢迎您 "+userID);
        Response.Write("您的密码是:"+passwd);
    }
      

  7.   


    谢谢指点。我换了以下代码:%
    var strUserID = Request.Form("userID").Item;
    var strPasswd=Request.Form("passwd").Item;
    Response.Write("欢迎您 "+strUserID);
    Response.Write("您的密码是:"+strPasswd);Response.End();
    %>显示的是
    欢迎您 undefined您的密码是:undefined为什么这里还是undefined呢?
      

  8.   


    var strUserID = Request.Form("userID").Item;
    var strPasswd=Request.Form("passwd").Item;// 当有传入参数 userID 时,  使用 Request.Form("userID").Item, 会得到字符串值
    // 没有传入参数 userID 时,  使用 Request.Form("userID").Item, 会得到 undefined// 这时候 strUserID 是真正的 undefined
    // 你可以通过 Request.Form("userID").Item == undefined 进行比较
    // 你却无法通过 Request.Form("userID") == undefined 进行比较, 因为 Request.Form('...') 永远不会是 undefinedResponse.Write("欢迎您 "+strUserID);
    Response.Write("您的密码是:"+strPasswd);Response.End();
    // 如果想在没有传入参数时,取得空串,可以这么写var strUserID = Request.Form('userID').Item || '';
    if (strUserID == '') {
       Response.Write("User ID 为空");
    } else {
       Response.Write("User ID: " + strUserID);
    }
      

  9.   

    我现在换成了<%
    var strUserID=Request.QueryString("userID");
    var strPasswd=Request.QueryString("passwd");
    if(strUserID=="undefined")
    {
    Response.Write("Hello!");
    }
    Response.Write("欢迎您 "+strUserID);
    Response.Write("您的密码是:"+strPasswd);Response.End();
    %>
    不管怎么换,这里的strUserID什么都不是 !!!不管是和undefined,还是"undefined",还是"",还是null
    都不是 !!!
      

  10.   


    上面都说了var theParam = Request.Form("paramName");   // QueryString 也一样接收参数后, theParam 是一个 StringList (字符串列表,类似于集合)可以判断其 Count 属性或者 Item 属性if (theParam.Count === 0) {
       // ...
    }if (theParam.Item === undefined) {
       // ...
    }