if 控制语句

'''
if-else基本格式
if (表达式){
语句1;
......
}else{
语句2;
.....
};
功能说明:如果表达式的值为true则执行语句1,否则执行语句2 '''

JS的控制语句与异常_代码块

var x= (new Date()).getDay();
// 获取今天的星期值,0为星期天
var y;

if ( (x==6) || (x==0) ) {
y="周末";
}else{
y="工作日";
};
alert(y);
// 等价于 y="工作日"; if ( (x==6) || (x==0) ) { y="周末"; };

if 可以单独使用

if语句嵌套格式
if (表达式1) {
    语句1;
}else if (表达式2){
    语句2;
}else if (表达式3){
    语句3;
} else{
    语句4;
};

JS的控制语句与异常_代码块_02

if (x==1){
    y="星期一";
}else if (x==2){
    y="星期二";
...
}else if (x==6){
    y="星期六";
}else if (x==0){
    y="星期日";
}else{
    y="未定义";
};

switch  选择控制语句

'''
switch基本格式
switch (表达式) {
case 值1:语句1;break;
case 值2:语句2;break;
case 值3:语句3;break;
default:语句4;
};
'''

JS的控制语句与异常_for循环_03

switch(x){
case 1:y="星期一";    break;
case 2:y="星期二";    break;
case 3:y="星期三";    break;
case 4:y="星期四";    break;
case 5:y="星期五";    break;
case 6:y="星期六";    break;
case 7:y="星期日";    break;
default: y="未定义";};

switchelse if结构更加简洁清晰,使程序可读性更强,效率更高。

JS的控制语句与异常_for循环_04JS的控制语句与异常_html_05
首先要看一个问题,if 语句适用范围比较广,只要是 boolean 表达式都可以用 if 判断;而 switch 只能对基本类型进行数值比较。两者的可比性就仅限在两个基本类型比较的范围内。
说到基本类型的数值比较,那当然要有两个数。然后重点来了——
if 语句每一句都是独立的,看下面的语句:
if (a == 1) ...
else if (a == 2) ...
这样 a 要被读入寄存器两次,1 和 2 分别被读入寄存器一次。于是你是否发现其实 a 读两次是有点多余的,在你全部比较完之前只需要一次读入寄存器就行了,其余都是额外开销。但是 if 语句必须每次都把里面的两个数从内存拿出来读到寄存器,它不知道你其实比较的是同一个 a。
于是 switch case 就出来了,把上面的改成 switch case 版本:
switch (a) {
        case 0:
                break;
        case 1:
}
                
总结:

1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化
2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选
  择执行哪一个case的语句块
3.if..else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载
  一次。
所以在多路分支时用switch比if..else if .. else结构要效率高。
switch为什么效率高?

for  循环控制语句

'''
for循环基本格式
for (初始化;条件;增量) {
    语句1;
    ...
};
功能说明:实现条件循环,当条件成立时,执行语句1,否则跳出循环体 '''

JS的控制语句与异常_html_06

for (var i=1;i<=7;i++){
    document.write("<H"+i+">hello</H "+i+"> ");
    document.write("<br>");
};
//----------------------------------------------
var arr=[1,"hello",true]//var dic={"1":"111"}
for (var i in arr){
    console.log(i);
    console.log(arr[i]);
};

注意:

doms=document.getElementsByTagName("p");

for (var i in doms) {
    console.log(i); // 0 1 2 length item namedItem
};

// 循环的是你获取的th一个DOM元素集,for in用来循环对象的所有属性,dom元素集包含了你上面输出的属性。
// 如果你只要循环dom对象的话,可以用for循环:

for (var i=0;i<doms.length;i++) { console.log(i); // 0 1 2 // console.log(doms[i]); };

结论:for i in 不推荐使用.

 

while  循环控制语句

'''
while循环基本格式
while (条件){
语句1;
...
};
功能说明:运行功能和for类似,当条件成立循环执行语句花括号{}内的语句,否则跳出循环 '''

JS的控制语句与异常_抛出异常_07

var i=1;
while (i<=7) {
    document.write("<H"+i+">hello</H "+i+"> ");
    document.write("<br>");
    i++;
}
//循环输出H1到H7的字体大小
<script language="JavaScript">
/* sayhello是定义的函数名,前面必须加上function和空格*/
function sayHello() {
    var hellostr;
    var myname=prompt("请问您贵姓?","苑"); 
    hellostr="您好,"+myname+'先生,欢迎进入"探索之旅"!';
    alert(hellostr); 
    document.write(hellostr);
};
 //这里是对前面定义的函数进行调用
sayHello();
</script>

练习:分别用for循环和while循环计算出1-100的和?

 

异常处理

'''
try {
    // 这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
    // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
    // e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
     // 无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
};
'''

注:主动抛出异常 throw Error('xxxx')

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>标题</title>
</head>
<body>

<p>p1</p>
<p>p2</p>
<p>p3</p>
<p>p4</p>

    <script>
        /* if控制语句 */
        // var name='alex';
        // if (name=='mike') {
        //     alert('mike')
        // }else if (name=='jack') {
        //     alert('jack')
        // }else {
        //     alert('alex')
        // };


        /* switch控制语句 */
        // var week='7';
        // switch (week) {
        //     case 1:alert('星期一'); break; // case 判断值:执行语句; break; 如果没有break,那么执行完后依旧会执行下一条
        //     case 2:alert('星期二'); break;
        //     case 3:alert('星期三'); break;
        //     case 4:alert('星期四'); break;
        //     case 5:alert('星期五'); break;
        //     case 6:alert('星期六'); break;
        //     case 7:alert('星期天'); break;
        //     default: alert('未定义'); // default: 执行语句; 尽量放在最后,如果不在最后那么后面也要加上break
        // }


        /* for循环 */
        // for (var a=0; a<10; a++) {
        //     // for (初始化; 条件; 增量) {执行语句};
        //     document.write("循环第" + (a+1) + "次" + "<br>")
        // };
        //
        // var attr=['a', 'b', 'c', 'd']
        // for (var x=0; x<attr.length; x++) {
        //     // attr.length代表此数组长度(4);x代表的是索引,还需要通过数组索引进行取值
        //     document.write('x的值为:' + x + '<br>')
        //     document.write('获取到的值是:' + attr[x] + '<br>')
        // };
        //
        // for (var i in attr) {
        //     // for (初始化 in 对象) {执行语句}; i是索引并不是值;此种方法不推荐使用
        //     document.write('i的值为:' + i + '<br>')
        //     document.write('获取到的值是:' + attr[i] + '<br>')
        // };
        //
        // // for (初始化 in 对象) {执行语句}; 的不便之处,在html加上几个标签然后再循环取,发现最后多出了length item namedItem,这三个为标签属性
        // var eles_P=document.getElementsByTagName('p');
        // for (var e in eles_P) {
        //     console.log(e)
        // };


        /* while循环,格式while (条件) {执行语句}; */
        // var n=0, m=0;
        // while (n<101) {
        //     m+=n;
        //     n++; // 这里是控制n的自增,很容易忘记,不控制的话进入了死循环
        // };
        // document.write(m);


        /* 异常 */
        try {
            // 这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
            console.log('ok');
            throw Error('***define error***') // throw Error主动抛出异常
        }
        catch (e) {
            // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行
            // e是一个局部变量,用来指向Error对象或者其他抛出的对象
            console.log(e)
        }
        finally {
            // 无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行
            console.log('finally')
        };
    </script>

</body>
</html>

 

while True: print('studying...')