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如何定义字符串??
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 是数字,它们当然不同。