任何复杂的程序逻辑都可以通过“顺序”,“分支”,“循环”三种基本的程序结构实现。
分支语句:
if分支语句:
if(表达式){
表达式为true时执行内容;
}
if(表达式){
表达式为true时执行内容;
}else{
表达式为false时执行内容;
}
var usename=””;
If(usensme==””){
alert(“请输入用户名”);
}else{
alert(“欢迎您”+usensme);
}
if(表达式1){
表达式1为true时执行内容;
}else if(表达式2){
表达式2为true时执行内容;
}else{
这个else可有可无,上述条件都不满足时执行这个else。
}
switch-case分支语句:
switch(表达式){
case 判断1:执行结果1;break;
case 判断2:执行结果2;break;
……
default:执行结果;
}
var username=”tom”;
switch(username){
case “tom”:alert(“老虎”);break;
case “mary”:alert(“狮子”);break;
default:alert(“没有匹配到值”);
}
switch(i){
//合并两种情形
case 25:
case 35:
alert(“25 or 35”);
break;
case 45:
alert(“45”);
break;
}
循环语句:
for循环语句:
for(1初始值;2表达式;3步幅){
4执行内容;
}
1—2(true)—4—3—2(true)—4—3—2……
1—2(true)—4—3—2(false)循环结束
var sum=0;
for(var i=1;i<=10;i++){
Sum+=i;
}
alert(“总和为:”+sum);
将for语句中的初始值,表达式,步幅省略之后,就会创建一个无线循环.
for(,,){ ...//无线循环 }
while循环语句:
1初始值;
while(2表达式){
3执行内容;
4步幅;
}
1—2(true)—3—4—2(true)—3—4……
1—2(false)直接中止循环
while循环是先判断再执行,所以可能一次都执行不了。
var sum=0;
var i=1;
while(i<=10){
sum+=i;
i++;
}
alert(“while总和为:”+sum);
do-while循环语句:
1初始值;
do{
2执行内容;
3步幅;
}while{
4表达式;
}
1—2—3—4(true)—2—3—4(true)……
1—2—3—4(false)中止循环
do-while循环是先执行再判断,所以不管条件是否成立,至少能够执行一次。
var sum=0;
var i=1;
do{
sum+=i;
i++;
}while{
i<=10;
}
alert(“do-while总和为:”+sum);
for-in语句:
6)是一种精准的迭代语句,用来枚举对象的属性.
ECMAScript对象的属性没有顺序,因此,返回的先后次序可能会因为浏览器而异.如果对象是null或undefined,将不执行循环体.
for(var property in window){
document.write(property);
}
label语句:
7)使用label语句可以在代码中添加标签,以便将来由 break或continue引用.break和continue语句都可以与lebel语句联合使用,从而返回代码中特定的位置。用于嵌套循环,减少循环次数。
语法: label:statement;
start:for(var i=0;i<count;i++){
alert(i);
}
break和continue语句:
8)break语句用于完全结束一个循环,跳出循 环体,开始执行循环之后的代码.continue只是中止本次循环,接着开始下一次循环.
break只能跳出一层循环.
break是跳出循环;return false是中止函数的执行;
for (i=0;i<5;i++) {
if (i==3) break;
}//输出0,1,2
for (i=0;i<=5;i++) {
if (i==3) continue;
}//输出0,1,2,4,5
//结合label语句
var num = 0;
for(var i = 0; i < 10; i++) {
for(var j = 0; j < 10; j++) {
if(i == 5 && j == 5) {
break;
}
num++;
}
}
alert(num);//输出95;当i==5&&j==5时跳出j循环,继续执行i==6,j==0...的循环
//结合label语句
var num = 0;
outPoint:
for(var i = 0; i < 10; i++) {
for(var j = 0; j < 10; j++) {
if(i == 5 && j == 5) {
break outPoint;
}
num++;
}
}
alert(num);//输出55;当i==5&&j==5时跳出outPoint,也就是i循环
//之外,不再继续执行
//结合label语句
var num = 0;
for(var i = 0; i < 10; i++) {
for(var j = 0; j < 10; j++) {
if(i == 5 && j == 5) {
continue ;
}
num++;
}
}
alert(num);//输出99,只跳过i==5&&j==5
var num = 0;
outPoint:
for(var i = 0; i < 10; i++) {
for(var j = 0; j < 10; j++) {
if(i == 5 && j == 5) {
continue outPoint;
}
num++;
}
}
alert(num);//输出95;当i==5&&j==5时跳出outPoint,也就是i循环之外,但再继续执行i==6&&j==0...
with语句:
引用对象,并对该对象上的属性进行操作,其作用是可以省略重复书写该对象名称,起到简化书写的作用。
大量使用with语句会导致性能下降,同时也会给调试代码造成困难.
var qs=location.search.substring(1);
var hostName=location.hostname;
var url=location.href;
//使用with语句
with(location){
var qs=search.substring(1);
var hostName=hostname;
var url=href;
}
try-catch语句:
把所有可能会抛出错误的代码都放在try语句块 中,而把那用于错误处理的代码放在catch块中.如果try块中的任何代码发了错误,就会立即退出代码执行过程,然后接着执行catch块,这时,catch块会接收到一个包含错误信息的对象。所有浏览器共同的保存着一个错误信息的message属性.
try {
window.boxFunction(); //调用不存在的函数
} catch (error) {
alert(error.message);
}
finally()子句:虽然在try-catch语句中finally子句是可选的,但finally子句一经使用,其代码无论如何都会执行。换句话说,try语句块中的代码全部正常执行,finally子句会执行;如果因为出错而执行了catch语句块,finally子句照样还会执行。只要代码中包含finally子句,则无论try或catch语句块中包含什么样的代码——甚至return语句,都不会阻止finally子句的执行。
function testFinally() { try { return 2; } catch (error) { return 1; } finally { return 0; } } testFinally(); //try和catch中的return语句被忽略,无论如何都会返回0