一加一看起来是个非常简单的问题,可是实际上在程序中,常常会出现程序员无法预料的各种状况。
【实例】代码3-2.htm试图计算用户两次输入的数字之和。
代码3-2.htm 计算用户两次输入的数字之和
- 01 <html>
- 02 <head>
- 03 <meta http-equiv="content-type" content="
text/html; charset=GB2312" />- 04 <title>3-2 一加一等于几?</title>
- 05 </head>
- 06 <body style="overflow:auto; padding:0px; margin:0px;">
- 07 <div style="font-size:14px; font-weight:bold;
color:white; font-family:Arial, 宋体;- 08 background-color:#6090DA; padding:4px 10px;">
- 09 <script>
- 10 intA = prompt("请输入第一个数字",1);
- 11 intB = prompt("请输入第二个数字",1);
- 12 document.write("你输入的第一个数字是"+intA);
- 13 document.write("<br>你输入的第二个数字是"+intB);
- 14 document.write("<br>两者和是"+(intA+intB));
- 15 </script>
- 16 </div>
- 17 </body>
- 18 </html>
【代码说明】为什么程序会认为1+1=11?其实细心的读者应该会注意到,本章最初介绍prompt函数的时候说过,该函数会“将用户的输入作为字符串返回”。而且对于字符串来说,操作符“+”的含义并不是相加,而是将字符串连接起来。因此,在代码3-2.htm运行的时候,通过prompt获得的两次用户输入“1”被直接连接起来,得到运算结果“11”。
【运行效果】假设用户两次输入的数字都是1,程序运行的结果是11.
JavaScript是一种弱类型语言。也就是说,不需要显式地声明各个变量的类型,JavaScript会自己决定变量在表达式中所扮演的“角色”。那么应该怎么解决变量类型的问题呢?表3.2是JavaScript内置的一些函数,用来实现变量类型的转换。
表3.2 用于转换变量类型的函数
比较代码3-1.htm和代码3-2.htm可以看出,代码3-1.htm使用parseInt将用户两次的输入转换为整形数值,并且用括号改变运算顺序,让数字相加的运算的操作优先执行。
【实例3.2】有时候,JavaScript自己决定变量类型也会产生出乎意料的错误。读者请阅读代码3-3.htm,并思考运行的结果是什么?
代码3-3.htm JavaScript自动类型转换
- <html>
- 01 <head>
- 02 <meta http-equiv="content-type" content="
text/html; charset=GB2312" />- 03 <title>3-3 JavaScript自动类型转换</title>
- 04 </head>
- 05 <body style="overflow:auto; padding:0px; margin:0px;">
- 06 <div style="font-size:14px; font-weight:bold;
color:white; font-family:Arial, 宋体;- 07 background-color:#6090DA; padding:4px 10px;">
- 08 <script>
- 09 document.write("1+1的结果是"+1+1);
- 10 document.write("<br>3*3的结果是"+3*3);
- 11 </script>
- 12 </div>
- 13 </body>
- 14 </html>
【代码说明】代码3-3.htm中,在计算1+1的时候,虽然两个常量都是整形的数值“1”,但是JavaScript按照操作符优先级相同时,自左至右的顺序,首先处理字符串“"1+1的结果是"+1”。JavaScript解释器认为这是字符串的连接,于是自动将常数“1”转变成了字符串类型。在计算3*3的时候,因为操作符“*”的优先级高于“+”,“3*3”的计算得以优先执行,于是得到了图3.4的结果。
【运行结果】运行的结果如图3.4所示
<head>
<meta http-equiv="content-type" content="text/html; charset=GB2312" />
<title>3-4 字符串对象常用方法使用示例</title>
</head>
<body style="overflow:auto; padding:0px; margin:0px;">
<div style="font-size:14px; font-weight:bold; color:white; font-family:Arial, 宋体; background-color:#6090DA; padding:4px 10px;">
<script>
document.write("big的效果".big());
document.write("<br>bold的效果".bold());
document.write("<br>fontsize=5的效果".fontsize("5"));
document.write("<br>A的Unicode编码是"+"A".charCodeAt(0));
document.write("<br>Unicode编码为70的字符是"+String.fromCharCode(70));
document.write("<br>Test toLowerCase".toLowerCase());
document.write("<br>Test toUpperCase".toUpperCase());
</script>
</div>
</body>
</html>