JS和JSP的共同使用(JS的字符串定义、null值的判断、变量的定义)

1.signin.jsp
<%
    String errMessage = null;
    Object obj = request.getAttribute("errorinfo");
    if(obj != null){
        errMessage = obj.toString().trim().toLowerCase();
    }
%>

<script type="text/javascript">
    function errorLogin(){
      var num = String("<%=errMessage%>");
          if(num !== "null"){
              document.getElementById("error_login").innerHTML = "username or password is wrong !";
       }
    }
</script>

<body οnlοad="javascript:errorLogin();">
   <span id="error_login" class="error" ></span>
</body>

 2. 上面的代码经过了我好长时间的修改才成功了,主要是对于JS中的null和"",这两个空值不熟悉的原因,在加上如何定义JS里面的字符串和变量,这些都不是很熟悉,所以才那样。

     现在解释下:

     (1)初始时:<%=errMessage%>为null,当时的写法是:var num = <%=errMessage%>; if(num !== null),

这样看上去很正确其实是不对的。初始时是正确的但是当我有值时即num=failed,<%=errMessage%>从request获取来的值为failed,这时报“failed未定义”的异常??

      (2)为什么会出现上面的异常呢?然后我去查JS如何定义变量?

      (3)又查了JS如何定义字符串??

            这样来定义了:var num = String("<%=errMessage%>"); 有了(4)中的 String(null-> "null",初始时

<%=errMessage%>的值为null,这样转化成String类型为"null",紧接着我用if(num !== "null"),这样在以后的num="failed"的时候,这时候就没报failed未定义的异常了,因为我把它转化成了String,这就是JS如何定义字符串。

这样就搞定了我的问题了。

      (4)到String的转换关系?

          String(undefined) -> "undefined" ,String(null-> "null" ,  String(""-> "" , String(0-> "0"
          String(
false-> "false"

      (5)它们的typeof类型?

           typeof(undefined) == 'undefined' ,typeof(null== 'object' ,typeof(""== 'string' ,

           typeof(0== 'number' ,typeof(false== 'boolean'

 

3. 全等号和非全等号(=== 和 !==)
     (1)这两个运算符所做的事情与等号和非等号(==和!==)相同,只是它们在检查相等性前,不执行类型转换。
    (2)例如:
       var sNum = "66";
          var iNum = 66;
          alert(sNum == iNum);	//输出 "true"
          alert(sNum === iNum);	//输出 "false"
          在这段代码中,第一个 alert 使用等号来比较字符串 "66" 和数字 66,输出 "true"。
          如前所述,这是因为字符串 "66" 将被转换成数字 66,,然后才与另一个数字 66 进行比较。
          第二个 alert 使用全等号在没有类型转换的情况下比较字符串和数字,当然,字符串不等于数字,
          所以输出 "false"。

     (3)非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回 true。
	例如:
	var sNum = "66";
	var iNum = 66;
	alert(sNum != iNum);	//输出 "false"
	alert(sNum !== iNum);	//输出 "true"
	这里,第一个 alert 使用非等号,把字符串 "66" 转换成数字 66,使得它与第二个运算数 66 相等。
           因此,计算结果为 "false",因为两个运算数是相等的。第二个 alert 使用的非全等号。
           该运算是在问:"sNum" 与 "iNum" 不同吗?这个问题的答案是:是的(true),
          因为 sNum 是字符串,而 iNum 是数字,它们当然不同。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值