JavaScript高级程序设计读书笔记(第三章)(三)

流程语句:

列举了一些不常用的流程语句:

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 中定义了两个名字相同的函数,则该名字只属于后定义的函数,也就是说会按照顺序只执行后面的函数。但是,通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员青戈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值