一、异常处理语句
你可以用 throw 语句抛出一个异常并且用 try...catch 语句捕获处理它
- throw 语句
- try...catch 语句
1.throw语句
使用throw语句抛出一个异常。当你抛出异常,你规定一个含有值的表达式要被抛出。
语法:throw expression;
你可以抛出任意表达式而不是特定一种类型的表达式。下面的代码抛出了几个不同类型的表达式
throw "Error2"; // String type throw 42; // Number type throw true; // Boolean type throw {toString: function() { return "I'm an object!"; } };
2.try...catch 语句
try...catch 语句标记一块待尝试的语句,并规定一个以上的响应应该有一个异常被抛出。如果我们抛出一个异常,try...catch语句就捕获它
try...catch 语句有一个包含一条或者多条语句的try代码块,0个或多个的catch代码块,catch代码块中的语句会在try代码块中抛出异常时执行。 换句话说,如果你在try代码块中的代码如果没有执行成功,那么你希望将执行流程转入catch代码块。如果try代码块中的语句(或者try 代码块中调用的方法)一旦抛出了异常,那么执行流程会立即进入catch 代码块。如果try代码块没有抛出异常,catch代码块就会被跳过。finally 代码块总会紧跟在try和catch代码块之后执行,但会在try和catch代码块之后的其他代码之前执行
catch块来处理所有可能在try块中产生的异常,捕捉块指定了一个标识符(上述语句中的catchID)来存放抛出语句指定的值;你可以用这个标识符来获取抛出的异常信息。在插入throw块时JavaScript创建这个标识符;标识符只存在于catch块的存续期间里;当catch块执行完成时,标识符不再可用
finally块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,finally块里的语句也会执行
function getMonthName(mo) { mo = mo - 1; // Adjust month number for array index (1 = Jan, 12 = Dec) let months = ["Jan","Feb","Mar","Apr","May","Jun","Jul", "Aug","Sep","Oct","Nov","Dec"]; if (months[mo]) { return months[mo]; } else { throw "InvalidMonthNo"; //throw error } } let monthName,myMonth = 15; try { // statements to try monthName = getMonthName(myMonth); // function could throw exception } catch (e) { console.log(e); //"InvalidMonthNo" monthName = "unknown"; }
3.Error对象
function getMonthName(mo) { mo = mo - 1; // Adjust month number for array index (1 = Jan, 12 = Dec) let months = ["Jan","Feb","Mar","Apr","May","Jun","Jul", "Aug","Sep","Oct","Nov","Dec"]; if (months[mo]) { return months[mo]; } else { throw (new Error("InvalidMonthNo")); //throw error } } let monthName,myMonth = 15; try { // statements to try monthName = getMonthName(myMonth); // function could throw exception } catch (e) { console.log(e); //Error: InvalidMonthNo monthName = "unknown"; }
二、循环语句
JavaScript中提供了这些循环语句:
- for 语句
- do...while 语句
- while 语句
- label 语句
- break 语句
- continue 语句
- for...in 语句
- for...of 语句
1.for 语句
语法:for ([initialExpression]; [condition]; [incrementExpression]) { statement }
let sum = 0; for (let i = 1; i < 100 ; i++) { sum += i; } console.log(sum); //4950
2.do...while 语句
语法:do { statement } while (condition);
let sum = 0, i = 1; do { sum += i; i++; } while (i < 100); console.log(sum); //4950
3.while 语句
语法:while (condition) { statement }
let sum = 0, i = 1; while (i < 100) { sum += i; i++; } console.log(sum); //4950
4.label 语句
语法:label : statement
使用一个标签来唯一标记一个循环,然后使用 break 或 continue 语句来指示程序是否中断循环或继续执行
loop1: for (let i = 0; i < 3; i++) { loop2: for (let j = 0; j < 3; j++) { if (i === 1 && j === 1) { continue loop1; } console.log(`i=${i},j=${j}`); /** i=0,j=0 i=0,j=1 i=0,j=2 i=1,j=0 i=2,j=0 i=2,j=1 i=2,j=2 */ } }
loop1: for (let i = 0; i < 3; i++) { loop2: for (let j = 0; j < 3; j++) { if (i === 1 && j === 1) { break loop1; } console.log(`i=${i},j=${j}`); /** i=0,j=0 i=0,j=1 i=0,j=2 i=1,j=0 */ } }
5.break 语句
使用 break 语句来终止循环,switch, 或者是终止 label 语句
- 当你使用不带 label 的 break 时, 它会立即终止当前所在的 while,do-while,for,或者 switch 并把控制权交回这些结构后面的语句
- 当你使用带 label 的 break 时,它会终止指定的标记(label)的语句
for (let i = 0; i < 3; i++) { for (let j = 0; j < 3; j++) { if (i === 1 && j === 1) { break; } console.log(`i=${i},j=${j}`); /** i=0,j=0 i=0,j=1 i=0,j=2 i=1,j=0 i=2,j=0 i=2,j=1 i=2,j=2 */ } }
6.continue 语句
这个 continue 语句可以用来继续执行(跳过代码块的剩余部分并进入下一循环)一个 while, do-while, for, 或者 label 语句
- 当你使用不带 label 的 continue 时, 它终止当前 while,do-while,或者 for 语句到结尾的这次的循环并且继续执行下一次循环
- 当你使用带 label 的 continue 时, 它会应用被 label 标识的循环语句
for (let i = 0; i < 3; i++) { for (let j = 0; j < 3; j++) { if (i === 1 && j === 1) { continue; } console.log(`i=${i},j=${j}`); /** i=0,j=0 i=0,j=1 i=0,j=2 i=1,j=0 i=1,j=2 i=2,j=0 i=2,j=1 i=2,j=2 */ } }
7.for...in 语句
for...in 语句来循环一个对象所有可枚举的属性。JavaScript 会为每一个不同的属性执行指定的语句。可以遍历Json对象
语法:for (variable in object) { statements }
let array = ['a','b','c','d','e']; let obj = { 'a':1, 'b':2, 'c':3, 'd':4, 'e':5 }; for (let k in array){ console.log(k); //0 1 2 3 4 } for (let k in obj) { console.log(`key:${k},value:${obj[k]}`); /** key:a,value:1 key:b,value:2 key:c,value:3 key:d,value:4 key:e,value:5 */ }
8.for...of 语句
语法:for (variable of object) { statement }
let array = ['a','b','c','d','e']; for (let v of array){ console.log(v); //a b c d e }