JavaScript基本概念(四)

来源:互联网 发布:js object to string 编辑:程序博客网 时间:2024/05/16 10:58

七、语句

1、表达式语句

  • 赋值语句
  • delete运算符:用于删除一个对象的属性。
delete o.x;
  • 函数调用

2、复合语句和空语句

  • 复合语句:用花括号将多条语句括起来。语句块结尾不需要分号,块中的原始语句必须以分号结束。
  • 空语句:包含0条语句的语句。
;

3、声明语句

1)var

var name1 [= value1] [,...,nameN [= valueN]];

2)function

function funcname(arg1,...,argn){    statements}

4、条件语句

1)if语句

if (condition){    statement1}else{    statement2}

2)else if

if (condition1){    statement1}else if (condition2){    statement2}else{    statement3}

3)switch语句

switch (expression) {    case value: statement        break;    case value: statement        break;    case value: statement        break;    case value: statement        break;    default: statement}

break会导致代码执行流跳出switch语句。如果省略,就会导致执行完当前case后,继续执行下一个case。

特别说明,switch可以使用任何数据类型;并且,每一个case的值不一定是常量,可以是变量,甚至是表达式。

5、循环

1)while语句

前测试循环语句。先判断再执行,满足条件才会执行循环体内的代码块。

while (expression){    statement}

2)do-while语句

后测试循环语句。无论是否满足条件,都会执行一次循环体内的代码块。

do {    statement}while (expression);

3)for语句

  • 前测试循环语句。
  • 具有在循环之前初始化变量和定义循环后要执行的代码的能力。
  • for语句中的初始化表达式、控制表达式和循环后的表达式都是可选的。
for (initialization; expression; post-loop-expression){    statement}
  • 在for循环的变量初始化表达式中,可以不使用var关键字,该变量的初始化可以在外部执行。
  • 在循环内部定义的变量可以在外部访问到,这是因为ECMAScript中不存在块级作用域。
var count = 10;for (var i = 0; i < count; i++){    alert(i);}alert(i);  // 10

4)for-in语句:迭代语句,可以用来枚举对象的属性。

for (property in expression){    statement}

使用for循环来遍历数组元素非常简单,而for-in循环则是用来更方便地遍历对象属性成员。

//for循环遍历数组元素for (var i=0;i<a.length;i++){    console.log(a[i]);}//for-in循环遍历数组元素for (i in a) {    console.log(i);}//遍历对象属性成员//将属性名字赋给变量p,输出每一个属性的值for (var p in o) {    console.log(o[p]);}

如果要迭代的对象的变量值为null或undefined,会抛出错误。但在ECMAScript5中,只是不执行该循环体,不会抛出错误。所以,建议在使用for-in循环之前,先检测该对象是否为null或undefined。

6、跳转

1)标签语句(label语句):在代码中添加标签。

label:statement
  • 定义的标签可以在将来的break或continue语句引用。
  • 加标签的语句一般都与循环语句配合使用。

2)break语句

break;break labelname;
  • 单独使用的作用是立即退出最内层的循环或switch语句。
  • 当break和标签一块使用时,程序将跳转到这个标签所标识的语句块的结束,或直接终止这个闭合语句块的执行。
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

在上面的代码中,如果每个循环正常执行到结束,num的值为100。但是,添加了这个标签就导致break语句不仅退出了内部循环,也退出了外部循环。

3)continue语句

continue;continue labelname;
  • 只能在循环体内使用。
  • 不是退出循环,而是转而执行下一次循环。
var num = 0;outermost:for (var i = 0; i < 10; i++){    for (var j = 0; j < 10; j++){        if (i == 5 && j == 5){            continue outermost;        }        num++;    }}alert(num);  // 95

在上述中,continue语句会强制继续执行循环,即退出内部循环,执行外部循环。

4)return语句

return expression;  //expression可带可不带

只能在函数体内出现。

5)throw语句:抛出异常。

throw expression;

6)try/catch/finally语句

try {    //通常来讲,这里的代码会从头执行到尾而不会产生任何问题,    //但有时会抛出一个异常,要么是由throw语句直接抛出异常,    //要么是通过调用一个方法间接抛出异常}catch(e) {    //当且仅当try语句块抛出了异常,才会执行这里的代码    //这里可以通过局部变量e来获得对Error对象或者抛出的其他值的引用,    //这里的代码块可以基于某种原因处理这个异常,也可以忽略这个异常,    //还可以通过throw语句重新抛出异常}finally {    //不管try语句是否抛出了异常,这里的逻辑总是会执行,终止try语句块的方式有:    //1)正常终止,执行完语句块的最后一条语句    //2)通过break、continue或return语句终止    //3)抛出一个异常,异常被catch从句捕获    //4)抛出一个异常,异常未被捕获,继续向上传播}

7、with语句

  • 将代码的作用域设置到一个特定的对象中。
  • 定义with语句的目的是为了简化多次编写同一个对象的工作。
with (expression){  //将expression添加到作用域链的头部    statement;  //然后执行statement,最后把作用域链恢复到原始状态。}

举个例子来说明。

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语句,否则将视为语法错误。
  • 大量使用with语句会导致性能下降,所以不推荐使用。

8、debugger语句

通常什么也不做。但是,当调试程序可用并运行的时候,JavaScript解释器将会以调试模式运行。实际上,这条语句用来产生一个断点。

9、“use strict”

  • 是一条指令。
  • 在顶层代码使用这个指令,就说明后续的代码将会解析为严格代码。
原创粉丝点击