语句
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中对应的值。
所有参数传递的都是值,不可能通过引用传递参数。
没有重载
如果定义了两个名字相同的函数,则该名字只属于后定义的函数。