流程语句:
列举了一些不常用的流程语句:
1、do-while语句:
在对条件表达式求值之前,循环体内的代码至少会被执行一次:
var i = 0;
do {
i += 2;
} while (i < 10);
alert(i); ==>弹出10
2、for-in语句:
for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性。
例:使用for-in 循环来显示了BOM 中window 对象的所有属性:
for (var propName in window) {
document.write(propName+"<br/>");
}
如果表示要迭代的对象的变量值为null 或undefined,for-in 语句会抛出错误。ECMAScript 5 更正了这一行为;对这种情况不再抛出错误,而只是不执行循环体。为了保证最大限度的兼容性,建议在使用for-in 循环之前,先检测确认该对象的值不是null 或undefined。
3、break和continue语句:
break语句直接结束循环,而continue语句会跳过当前循环从循环的顶
部继续执行。
4、switch语句
switch语句执行效率会高于if语句。
语法:
switch (expression) {
case value: statement
break;
case value: statement
break;
case value: statement
break;
case value: statement
break;
default: statement
}
通过为每个case 后面都添加一个break 语句,就可以避免同时执行多个case 代码的情况。假如确实需要混合几种情形,不要忘了在代码中添加注释,说明你是有意省略了break 关键字:
switch (i) {
case 25:
case 35: /* 合并两种情形 */
alert("25 or 35");
break;
case 45:
alert("45");
break;
default:
alert("Other");
}
可以在switch 语句中使用任何数据类型,无论是字符串,还是对象都可以。其次,每个case 的值不一定是常量,可以是变量,甚至是表达式:
//例一:
switch ("hello world") {
case "hello" + " world":
alert("Greeting was found.");
break;
case "goodbye":
alert("Closing was found.");
break;
default:
alert("Unexpected message was found.");
}
//例二:
var num = 25;
switch (true) {
case num < 0:
alert("Less than 0.");
break;
case num >= 0 && num <= 10:
alert("Between 0 and 10.");
break;
case num > 10 && num <= 20:
alert("Between 10 and 20.");
break;
default:
alert("More than 20.");
}
函数
参数:
ECMAScript 函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数:
function sayHello(){
alert("Hello "+arguments[0] + arguments[1]);
}
sayHello();//Hello undefiend undefiend
sayHello('java','script');//Hello javascript
这个例子说明ECMAScript 函数的一个重要特点:命名的参数只提供便利,但不是必需的。
ECMAScript 中的参数在内部是用一个数组来表示的,即arguments。
可以根据ECMAScript函数参数的这个特性开发功能:
function doAdd() {
if(arguments.length == 1) {
alert(arguments[0] + 10);
} else if (arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
doAdd(10); //20
doAdd(30, 20); //50
arguments 对象可以与命名参数一起使用:
function doAdd(num1, num2) {
if(arguments.length == 1) {
alert(num1 + 10);
} else if (arguments.length == 2) {
alert(arguments[0] + num2);//第一个参数加第二个参数
}
}
doAdd(10,20);//30
注意:
arguments 对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。没有传递值的命名参数将自动被赋undefined 值。
没有重载:
ECMAScript 函数不能像传统意义上那样实现重载。
如果在ECMAScript 中定义了两个名字相同的函数,则该名字只属于后定义的函数,也就是说会按照顺序只执行后面的函数。但是,通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载。