美文网首页
★05.语句

★05.语句

作者: iDragonfly | 来源:发表于2017-07-03 20:00 被阅读0次

条件语句

if语句

if (x == 1)
    x = 2;
else if (x == 2)
    x = 3;
else
    x = 4;

switch语句

  • C/C++ 的区别,case后面可以跟随任何表达式。
  • 匹配操作用的是===而非==,不会涉及类型转换。
  • 因为不是所有的case表达式都能执行到,所以应当避免有副作用的表达式,而使用 常量表达式
switch (n) {
    case 1:
        break;
    case 2:
        break;
    case 3:
        break;
    case 4:
        break;
    default:
        break;
}

循环

while循环

var count = 0;
while (count <= 10) {
    count++;
}

do/while循环

var count = 0;
do {
    count++;
} while (count <= 10);

for循环

for (var i = 0; i < 10; i++) {
    console.log(i);
}

for/in循环

// 输出数组array所有元素
for (var val in array) {
    console.log(val);
}

// 输出对象obj所有可枚举属性
for (var val in obj) {
    console.log(val);
}

跳转语句

标签语句

  • 可以给语句添加标签,配合breakcontinue使用:
  • 标签名字可以和变量或函数重名。
  • 任何语句可以有多个标签。
// 给while循环添加标签mainloop
mainloop : while(token != null) {
}

break语句

  • 单独使用时的作用是立即退出最内层的循环或switch语句。
  • 配合标签使用可以跳出多层循环。
  • 配合标签使用的示例:
outsideloop: for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 10; j++) {
        if (i == targetI && j == targetJ)
            break outsideloop;
    }
}

continue语句

  • 配合标签使用可以跳出多层循环。
  • 配合标签使用的示例:
outsideloop: for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 10; j++) {
        if (i == targetI && j == targetJ)
            continue outsideloop;
    }
}

return语句

  • 和C语言表现一致。

异常相关 —— throwtrycatchfinally

  • throw可以后接任何类型,通常可以抛出代表错误码的数字,或者可读的错误消息的字符串,或者一个对象内部携带关于异常的必要信息。
  • JavaScript 解释器抛出的异常通常是Error类型及其子类,Error内部包含一个name属性表示错误类型,一个message属性用来存放传递给构造函数的字符串。
  • 可以直接抛出Error类型或者继承Error的子类。
  • 简单示例:
try {
    throw Error("nothing happen");
}
catch (e) {
    // 处理异常
}
finally {
    // 执行清理工作
}
  • 跳转语句与finally的示例:
var foo = function () {
    try {
        throw Error("nothing happen");
    }
    finally {
        return 1;   // 未处理异常直接正常返回
    }
}
foo();

其他语句类型

with语句

  • with语句慢且难以优化,不建议使用。
  • 严格模式下禁止使用with语句。
  • 简单示例:
document.forms[0].address.value

with(document.forms[0]) {
    // 由于with的存在,这里可以直接访问表单元素
    name.value = "";
    address.value = "";
    email.value = "";
}
  • with只能用来查询标识符,而不能创建对象属性:
// 若不存在o.x会报错,但是如果存在,则相提供了访问o.x的快捷方式
with(o) x = 1;

debugger语句

  • debugger语句在调试模式运行时,相当于产生一个断点,普通模式运行时则没有任何效果。
  • 简单示例:
function f(o) {
    if (o === undefined) debugger;  // 调试模式运行时会中断
    ...
}

"use strict"指令

  • "use strict"是指令而不是语句,用于将当前区域声明为严格模式。
  • 指令与语句的区别:
    • 不包含任何语言关键字,仅仅是一个特殊字符串直接量。ES5以后的标准可能会用use用作关键字,这样就能省略引号了。
    • 只能出现在脚本代码的开始或者函数体的开始,任何实体语句之前。
  • 如果函数体定义所处的代码是严格模式或者函数体使用了"use strict"指令,则函数体的代码也是严格模式。
  • 如果eval()调用所处的代码是严格模式或者要执行的字符串使用了"use strict"指令,则eval()内的代码是严格模式。

严格模式

  • 禁止使用with语句。
  • 变量必须使用var事先声明(在非严格模式下,如果不使用var事先声明,则会被当做隐式声明了一个全局变量,不论隐式声明时的作用域在哪)。
  • 函数中的thisundefined,方法中的this是对象(非严格模式下,函数中的this是全局对象)。
  • 通过call()apply()调用函数时,this是传给call()apply()的第一个参数(非严格模式,若thisnullundefined,会被全局对象代替)。
  • 给只读属性赋值或不可拓展的对象创建新成员会抛出 类型错误异常 (非严格模式下,只是操作失败而不报错)。
  • 传入eval()的代码不能声明变量或定义函数。
  • delete运算符的非法使用会抛出 语法错误异常 (非严格模式下,只是操作失败,并返回false)。
  • 在一个对象中定义同名属性会产生语法错误(非严格模式下,不会报错)。
  • 函数声明中有同名参数会报错(非严格模式下,不会报错)。
  • 禁止八进制整数直接量。
  • evalarguments当做关键字。

相关文章

网友评论

      本文标题:★05.语句

      本文链接:https://www.haomeiwen.com/subject/phpzcxtx.html