你可以US信用盘平台出租 haozbbs.com Q1446595067 用 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
}