条件语句
if (condition) {
statements;
}
条件必须放在if后面的圆括号中。条件的求值结果永远是一个布尔值,花括号中的语句,不管有多少条,只有在给定条件的求值结果是true的情况下才会得到执行。
if (1>2) {
alert(”The world has gone mad!”);
}else {
alert(”All is well with the world”);
}
2.6.1 比较操作符
几乎只能用在条件语句中的操作符
>, <, >=, <=, ==, !=, 比较符
2.6.2 逻辑操作符
JS允许我们把条件语句里的操作组合在一起。
比较操作叫做逻辑操作数,下面是把这两个逻辑操作数组合在一起的具体做法:
if (num>=5 && num<=10) {
alert(”The number is in the right range.”);
}
&&”逻辑与”,是一个逻辑操作符。
逻辑操作符的对象是布尔值,每个逻辑操作数返回一个布尔值true或false。
“逻辑与”操作只有在两个操作数都是true时才会是true。
“逻辑或”操作符由两个垂直线字符构成(||)。只要它的操作数中有一个是true,”逻辑或”操作就将是true。如果它的两个操作数都是true,”逻辑或”操作也将是true。只有两个都是false时,”逻辑或”操作才会是false。
if (num>10 || num<5 ){
alert (”The number is not in the right range.”);
}
JS还提供一个”逻辑非”操作符,它由一个感叹号(!)单独构成。”逻辑非”操作符只能作用于单个逻辑操作数,其结果是把那个逻辑操作数所返回的布尔值取反。
我们可以用”逻辑非”操作符把整个条件语句的结果颠倒过来。
if ( !(num >10 || num <5)){
alert (”The number IS in the right range.”);
}
2.7 循环语句
if语句的唯一不足是它无法用来完成重复性的操作。如果需要反复多次执行同一个代码块,就必须使用循环语句。
循环语句可以反复多次执行同一段代码,分为几种不同的类型,但它们的工作原理几乎一样:只要给定条件仍得到满足,代码就重复执行下去;一旦条件求值不再是true,循环就到此为止。
2.7.1 while
while (condition) {
statements;
}
while循环与if的唯一区别是:只要给定的求值结果是true,包含在花括号里的代码就将反复的执行下去。
var count = 1;
while (count < 11) {
alert (count);
count++;
}
代码分析: 首先,创建变量count并赋值1;
以count<11为条件(只要小于11,就重复执行这个循环),创建一个while循环;
在while内部,用”++”操作符对变量count的值执行加1操作;
而这一操作将重复10次;
当循环完成后,变量count的值是11
注意:这里的关键是在while循环的内部必须发生一些会影响循环控制条件的事情。
2.7.2 do…while
类似与if语句的情况,while循环的花括号部分所包含的语句有可能不被执行:因为对循环控制条件的求值发生在每次循环开始前,所以如果条件首次求值结果是false,则代码不会被执行。
在某些场合,我们需要那些被包含在循环语句内部的代码至少执行一次。这时,do循环将是我们最佳选择。
do {
statements;
} while (condition);
这与刚才介绍的while循环非常相似,但是有个很大的区别: 对循环控制条件的求值发生在每次循环结束之后。因此,即使循环控制条件的首次求值是false,包含在花括号里的语句也至少会被执行一次。
我们可以把前一小节里的while循环改写为如下所示的do…while循环:
var count = 1;
do {
alert (count);
count++;
} while (count < 11);
这段代码的执行结果与上面的结果完全一样。循环10次,最终count的值是11.
再看看下面这个变体:
var count = 1;
do {
alert (count);
count++;
} while(count < 1);
这个do循环里,控制条件的求值永远不为true,可是因为do循环的循环条件出现在花括号部分之后,所以这个do里的语句还是执行了一次。
注意细节:这些语句执行完毕后,count的值将是2不是1。
2.7.3 for
用for循环来重复执行一些代码也是很方便。从循环执行一些代码的意义上讲,它类似于while循环;从另一方面讲,for循环只是刚才介绍的do循环的一种变体。 如果仔细观察do循环的例子,就会发现它们可以被改写:
initialize;
while(condition) {
statements;
increment;
}
而for循环不过是把如上所示的循环结构改写紧凑:
for (initial condition; test condition; alter condition) {
statement;
}
用for循环来重复执行一些代码的好处是循环控制结构更加清晰。与循环有关的内容都包含在圆括号内,上个例子可以改写成
for (var count = 1; count < 11; count ++) {
alert (count);
}
现在,当我们把一些代码放在花括号中间,我们清楚的知道代码将执行10次。
for循环最常见的用途之一是对某个数组里的全体元素进行遍历处理。这往往需要用到数组的array.length属性。这个属性告诉我们数组里的个数
var beatles = Array(”John”, “Paul”, “George”, “Ringo”);
for (var count = 0; count<beatles.length; count++) {
alert(beatles[count]);
}
我们将看到4条alert,分别对应4个队员。
2.8 函数
如果需要多次使用同一组语句,还可以把它们打包成函数。所谓函数就是一组允许人们在代码里随时调用的语句。从效果上来看,每个函数都相当于一个短小的脚本。
作为一个良好的习惯,我们应该先对函数定义再调用它们。
function shout() {
var beatles = Array(”John”, “Paul”, “George”, “Ringo”)
for (var count = 0; count < beatles.length; count ++){
alert(beatles[count]);
}
}
这个函数里的循环语句将依次弹出几个alert对话框来显示beatles乐队成员的名字,可以随时使用以下所示记号来调用这个函数:
shout();
每当需要重复执行时,我们可以利用函数来避免大量输入相同内容。不过函数真正的优势是我们可以把不同的数据传递给他们,而它们将使用实际传递给他们的数据来完成预定的操作。把数据传递给函数时,称为参数。
函数的定义:
function name(arguments) {
statements;
}
JS提供了许多可以拿来就用的函数,例如alert。
在定义函数时,可以声明任意多个参数,需要用逗号隔开。函数内部,可以像使用普通变量那样使用任何一个参数。下面是一个函数的例子: 将两个数值相乘处理
function multiply(num1, num2){
var total = num1 * num2;
alert(total);
}
在定义了这个函数以后,我们可以在任意位置调用:
multiply(10, 2);
如果这个函数能把乘法结果返回给调用这个函数的语句,往往更有用。我们可以创建一个函数,让他返回一个值,包括数值,字符串,数组,布尔值
function multiply(num1, num2){
var total = num1 * num2;
return total;
}
下面这个函数只有一个参数(一个华氏温度值),将返回一个值(同温度的摄氏温度值)
function convertToCelsius(temp) {
var result = temp – 32;
result = result / 1.8;
return result;
}
函数真正的价值体现在: 我们可以把他们当作一种数据类型来使用,意味着我们可以把一个函数的调用结果赋值给一个变量
var temp_fahrenheit = 95;
var temp_celsius = convertToCelsuis(temp_fahrenheit);
alert (temp_celsius);
把华氏温度值95转换为摄氏温度值。
参考: 命名变量时,我用下划线来分隔各个单词;命名函数时,我从第二个单词开始把每个单词的第一个字母大写。
变量的作用域
作为一种良好的习惯,我们第一次对某个变量进行赋值时应该用var对其做出声明。变量可以是全局的,也可以是局部的,在谈论全局变量和局部变量的区别时,我们其实是在讨论变量的作用域(scope)。
全局变量: 可以在脚本中任何位置被引用,包括函数的内部,全局变量的作用域是整个脚本。
局部变量:只存在于它做出声明的函数内部,函数外部无法引用,作用域仅限于特定的函数。
如果一个函数的内部不小心使用了某个全局变量,即使本意是想使用一个局部变量,JS也会认为是在引用那个全局变量。用var可以明确为变量设定一个作用域。
如果在某个函数中使用了var,那个变量就被视为一个局部变量,只存在于这个函数上下文中;反之,如果没有使用var,那个变量就被视为一个全局变量,如果脚本中已经存在一个同名的变量,这个函数将覆盖那个现有的变量的值。
例子:
function square(num) {
total = num * num;
return total;
}
var total = 50;
var number = square(20);
alert (total);
这段代码中,total的值从50到20被覆盖。输出结果是400。
因为未在这个函数里用var关键字把内部的total变量明确的声明为局部变量,这个函数就把全局变量的值也改变了。
正确的写法是 var total = num * num;
现在total安全了,再调用square()也不会影响到他。
请记住: 函数在行为方面应该像一个自我包容的脚本,这意味着在定义一个函数时,我们必须把它内部的变量全都明确的声明为局部变量。
不争,元气不伤;不畏,慧灼闪光。
不怒,百神和畅;不忧,心地清凉。
不求,不卑不亢;不执,可圆可方;
不贪,便是富贵;不苟,何惧君王!