2.1. JavaScript中的判定
判定赋予了程序智能。不使用它你就不能写出一个好的程序,不管你是创建游戏、校验密码、根据用户前面的做出的选择给予用户一组选择,还是一些其他的情况。
判定是以条件语句为基础的,条件语句是一种值或真或假的简单语句。这就是基本数据类型中的布尔(Boolean)数据类型该应用的地方了。循环是进行判定的另一个重要工具,例如,可以使你从头到尾地循环用户的输入或循环一个数组,并对应的进行决策。
2.1.1. 逻辑和比较运算符
有两组主要的运算符,我们下面会学到:
l 数据比较运算符:比较操作数并返回布尔(Boolean)值。
l 逻辑运算符:对多于一种的情况的进行测试。
我们会先看一下比较运算符。
2.1.1.1. 数据比较
表2-3列出了一些最常用的比较运算符。
表2-3. JavaScript中的比较
|
运算符
|
描述
|
例子
|
|
==
|
检查左边和右边的操作数是否相等
|
123 == 234 返回假值。
123 == 123 返回真值。
|
|
!=
|
检查左边的操作数是否不等于右边的操作数
|
123 != 123 返回假值。
123 != 234 返回真值。
|
|
>
|
检查左边的操作书是否大于右边的操作数
|
123 > 234 返回假值。
234 > 123 返回真值。
|
|
>=
|
检查左边的操作书是否大于或等于右边的操作数
|
123 >= 234 返回假值。
123 >= 123 返回真值。
|
|
<
|
检查左边的操作书是否小于右边的操作数
|
234 < 123 返回假值。
123 < 234 返回真值。
|
|
<=
|
检查左边的操作书是否小于或等于右边的操作数
|
234 <= 123 返回假值。
234 <= 234 返回真值。
|
n 警告:小心这个==相等运算符:它太容易了,以至于在一个脚本中常由于会被误用为赋值运算符:=,而产生许多错误。
这些运算符都使用于字符串数据类型和数值类型,并且是区分大小写的:
<html>
<body>
<script type="text/javascript">
document.write( "Apple" == "Apple" )
document.write( "<br />" );
document.write( "Apple" < "Banana" )
document.write( "<br />" );
document.write( "apple" < "Banana" )
</script>
</body>
</html>
下面是你会得到的结果:
true
true
false
当计算一个字符串比较的表达式时,JavaScript解释器会依次比较两个字符串中每个字符的ASCII码—每个字符串的第一个字符,然后是第二个字符,依次类推。大写的A在ASCII中表示65,B 表示 66, C表示 67,依次类推。 计算这个表达式"Apple" < "Banana",JavaScript解释器使用每个字符中的第一个字符的ASCII码来进行比较:65 < 66, 因此 A 排在前面,这个比较是真值。当检验这个表达式 "apple" < "Banana"的时候,JavaScript解释器做了同样的事情;然而,小写字母 a 的ASCII码是97,因此这个表达式"a" < "B"转变为97 < 66,它的值是假。你可以使用<、 <=、 >、 >= 运算符来进行字母顺序的比较。如果你需要确保所有的字母都是同样的大写或小写,你可以使用String对象的toUpperCase()和toLowerCase()方法。比较运算符和数字运算符是一样的,都可以使用变量。如果我们想按字母顺序比较apple和Banana ,我们可以这样做:
<html>
<body>
<script type="text/javascript">
var string1 = "apple";
var string2 = "Banana";
string1 = string1.toLowerCase( );
string2 = string2.toLowerCase( );
document.write( string1 < string2 )
</script>
</body>
</html>
可是在你使用等号运算符比较String对象的时候,有一些细节需要注意。试一下这个:
<html>
<body>
<script type="text/javascript">
var string1 = new String( "Apple" );
var string2 = new String( "Apple" );
document.write( string1 == string2 )
</script>
</body>
</html>
你会得到一个返回false值。事实上,我们在上面比较的是两个字符串对象,而不是两个基本类型的字符串包含的字符,返回的false结果业表明,即使两个字符串对象持有相同的字母,它们也不是同一个对象。
如果你确实需要比较两个对象持有的字符串,那么你可以使用valueOf()方法来对数据值进行比较:
<html>
<body>
<script type="text/javascript">
var string1 = new String( "Apple" );
var string2 = new String( "Apple" );
document.write( string1.valueOf() == string2.valueOf() );
</script>
</body>
</html>
2.1.1.2. 逻辑运算符
有时候你会需要把多个比较放到一个条件组中。你也许想检查用户输入的信息是否有意义,或者根据用户前面的回答,限制他们可以选择的数据项。你可以使用表2-4中的逻辑运算符来完成这样的功能。
表2-4。 JavaScript中的逻辑运算符
|
符号
|
运算符
|
说明
|
例子
|
|
&&
|
And
|
两个条件都必须为真。
|
123 == 234 && 123 < 20 (false)
123 == 234 && 123 == 123 (false)
123 == 123 && 234 < 900 (true)
|
|
||
|
Or
|
其中一个或两个必须为真。
|
123 == 234 || 123 < 20 (false)
123 == 234 || 123 == 123 (true)
123 == 123 || 234 < 900 (true)
|
|
!
|
Not
|
逻辑取反。
|
!(123 == 234) (true)
!(123 == 123) (false)
|
一旦求出了数据的值,我们需要能够根据这个输出结果进行判定选择。这正是条件语句和循环语句可以发挥作用的地方。你会发现这章中我们学习的运算符会经常被用到一个条件语句或循环语句中。
2.1.2. 条件语句
if...else 结构被用来测试条件,格式如下:
if ( condition ) {
// Execute code in here if condition is true
} else {
// Execute code in here if condition is false
}
// After if/else code execution resumes here
如果这个条件测试为真,紧跟if后面的大括号中的代码就会被执行,但如果它不为真则不会执行。你也可以使用else语句,创建在if条件不被满足的情况下应该执行的代码块。
我们来改进一下在这一章的前面建立的货币转换程序,创建一个循环来处理用户的非数值输入:
<html>
<body>
<script type="text/javascript">
var euroToDollarRate = 0.872;
// Try to convert the input into a number
var eurosToConvert = Number( prompt( "How many Euros➥
do you wish to convert", "" ) );
// If the user hasn't entered a number, then NaN
// will be returned
if ( isNaN( eurosToConvert ) ) {
// Ask the user to enter a value in numerals
document.write( "Please enter the number in numerals" );
// If NaN is not returned, then we can use the input
} else {
// and do the conversion as before
var dollars = eurosToConvert * euroToDollarRate;
document.write( eurosToConvert + " euros is " + ➥
dollars + " dollars" );
}
</script>
</body>
</html>
这个if语句使用了isNaN()函数,它会返回true,如果变量eurosToConvert中的值不是一个数字。
n 注解:记住剂可能地使错误信息友好并且有用。良好的错误信息可以明了的告知用户他们该做什么,这样可以使他们更有耐心的使用程序。
我们使用逻辑运算符和嵌套的if语句,可以创建更夫杂的条件:
<html>
<body>
<script type="text/javascript">
// Ask the user for a number and try to convert the
// input into a number
var userNumber = Number( prompt( "Enter a number between➥
1 and 10", "" ) );
// If the value of userNumber is NaN, ask the user
// to try again
if ( isNaN( userNumber ) ) {
document.write( "Please ensure a valid number is ➥
entered" );
// If the value is a number but over 10, ask the
//user to try again
} else {
if ( userNumber > 10 || userNumber < 1 ) {
document.write( "The number you entered is not➥
between 1 and 10" );
// Otherwise the number is between 1 and 10 so
// write to the page
} else {
document.write( "The number you entered was " + userNumber );
}
}
</script>
</body>
</html>
我们知道这个数只要是一个数字并且小于10就可以。
注解:注意这段代码的布局。我们对if与else语句以及代码块使用了缩进,所以阅读和理解代码块是从哪里开始和结束的非常容易。使你的代码尽可能得简单明了是非常重要的。
试着阅读一下没有使用缩进和空格的这段代码:
<html>
<body>
<script type="text/javascript">
// Ask for a number using the prompt() function and try to make it a number
var userNumber = Number(prompt("Enter a number between 1 and 10",""));
// If the value of userNumber is NaN, ask the user to try again
if (isNaN(userNumb