《JavaScript高级程序设计》读书笔记--3-语句和函数

语句

if语句

if(condition1){
    语句1...
}else if(condition2){
    语句2...
}else{
    语句3...
}

do-while语句

do{
    语句...
}while(表达式)

while语句

while(表达式){
    语句...
}

for语句

for(初始化变量;终止条件;表达式){
    语句...
}

for-in语句
是一种精准的迭代语句,可以用来枚举对象的属性。

for(var propName in window){
    document.write(propName);
}

这个例子中使用for-in循环显示BOM中window对象的所有属性。但是返回的属性名的顺序是不可预测的。循环前应检查对象的值不是null或者undefined。

label语句
使用该语句可以在代码中添加标签,以便将来使用。

start: for(var i=0; i<count; i++){
    alert(i);
}

该例子定义start标签可以在将来由break或者continue语句引用,加标签的语句一般都要与for语句等循环语句配合使用。

break和continue语句
break语句会立即退出循环,强制继续执行循环后面的语句。而continue语句在立即退出循环后会从循环的顶部继续执行。
break和continue语句都可以与label语句联合使用,从而返回代码中特定的位置。多发生在循环嵌套的情况下,如:

var num=0;
outermost:
for(var i=0; i<10;i++){
    for(var j=0; j<10;j++){
        if(i==5 && j==5){
            break outermost;
        }
        num++;
    }
}
alert(num);//55

该例子中outermost标签表示外部的for语句。如果每个循环正常执行10次,则num++语句就会正常执行100次。但是内部循环中的break语句带了一个参数:要返回到的标签。添加这个标签的结果将导致break语句不仅会退出内部的for语句(即使用变量j的循环),而且也会退出外部的for循环(即使用变量i的循环)。为此,当变量i和j都等于5时,num的值正好是55。同样continue语句也可以这样与label语句连用。
虽然联用break、continue和label语句能够执行复杂的操作,但如果使用过度也会给调试带来麻烦,在此建议如果使用label御景园一定要使用描述性的标签,同时不要嵌套过多的循环。

with语句
将代码的作用域设置到一个特定的对象中。
定义with语句的目的主要是为了简化多次编写同一个对象的工作。

var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
//以上代码都包含location对象,如果使用with语句可以把上面的代码改写成

with(location){
    var qs = search.substring(1);
    var hostName = hostname;
    var url = href;
}
with语句关联了location对象。这意味着with语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询location对象中是否有同名的属性。如果发现同名属性则以location对象属性值作为变量的值。但是,严格模式下不允许使用with语句,否则将视为语法错误。不建议使用with语句。

switch语句

switch(表达式){
    case value1: 语句1
        break;
    case value2: 语句2
        break;
    ...
    default: 默认语句
}
switch语句中可以使用任何数据类型(很多其他语言中只能使用数值),无论是字符串还是对象都没有问题。
每个case的值不一定是常量,可以是变量甚至是表达式。
switch("hello world"){
    case "hello" + "world":
        alert("Greeting was found");//显示结果"Greeting was found"
        break;
    case "goodbye":
        alert("Closing was found.");
        break;
    default:
        alert("Unexpected message was found.");
}

使用表达式作为case值:

var num = 25;
switch(true){
    case num<0:
        alert("Less than 0.");
        break;
    case num>=0 && num<=20:
        alert("Between 0 and 20.");
        break;
    default:
        alert("More than 20.");//显示"More than 20."
}

注意:
switch语句在比较值时使用的是全等操作符,因此不会发生类型转换,例如,字符串“10”不等于数值10。

函数

//函数定义
function functionName (arg0,arg1,...,argN){
    statements
}

//函数调用
functionName(arg0,arg1,...,argN);

任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值。而且执行完return语句之后停止并立即退出,位于return语句之后的任何代码都永远不会执行。

理解参数
在函数体内可以通过arguments对象来访问这个参数数组,从而获得传递给函数的每个参数。arguments对象只是与数组类似(它并不是Array的实例),因为可以使用方括号语法访问它的每一个元素(即第一个元素是arguments[0],第二个元素是arguments[1],以此类推),使用length属性来确定传递进来的参数个数。
arguments对象可以与命名参数一起使用。
arguments的值永远与对应命名参数的值保持同步。但是存储空间是独立的。修改命名参数不会改变arguments中对应的值。
所有参数传递的都是值,不可能通过引用传递参数。

没有重载
如果定义了两个名字相同的函数,则该名字只属于后定义的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值