
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
前两篇文章中达内长沙java培训的老师,为大家分享了语法和类型、数据结构和类型这两个知识点,现在我们来看第三个。
No3.控制流和错误处理
1.块表达式
作用:块表达式一般用于控制流,像if、for、while。下面的代码中{x++;}就是一个块声明。
while (x < 10) {
x++;
}
ES6之前没有块域范围:在ES6之前,在block中定义的变量实际是包含在方法或者全局中,变量的影响超出了块作用域的范围。例如下面的代码最终执行结果为2,因为block中声明的变量作用于方法。
var x = 1;
{
var x = 2;
}
console.log(x); // outputs 2
ES6之后有块域范围:在ES6中,我们可以把块域声明var改成let,让变量只作用域block范围。
2.逻辑判断
判断为false的特殊值:false、undefined、null、0、NaN、”"。
简单boolean和对象Boolean类型:简单boolean类型的false和true与对象Boolean类型的false和true是有区别,两者是不相等的。如下面的例子:
var b = new Boolean(false);
if (b) //返回true
if (b == true) //返回false
No4.异常处理
1.异常类型
抛出异常语法:抛异常可以是任意类型。如下所示。
throw "Error2"; //字符串类型
throw 42; //数字类型
throw true; //布尔类型
throw {toString: function() { return "I'm an object!"; } }; //对象类型
自定义异常:
//创建一个对象类型UserException
function UserException(message) {
this.message = message;
this.name = "UserException";
}
//重写toString方法,在抛出异常时能直接获取有用信息
UserException.prototype.toString = function() {
return this.name + ': "' + this.message + '"';
}
//创建一个对象实体并抛出它
throw new UserException("Value too high");
2.语法
关键字:使用try{}catch(e){}finally{}语法,和C#语法相似。
finally返回值:如果finaly添加了return语句,则不管整个try.catch返回什么,返回值都是finally的return。如下所示:
function f() {
try {
console.log(0);
throw "bogus";
} catch(e) {
console.log(1);
return true; //返回语句被暂停,直到finally执行完成
console.log(2); //不会执行的代码
} finally {
console.log(3);
return false; //覆盖try.catch的返回
console.log(4); //不会执行的代码
}
// "return false" is executed now
console.log(5); // not reachable
}
f(); //输出0, 1, 3;返回false
finally吞并异常:如果finally有return并且catch中有throw异常。throw的异常不会被捕获,因为已经被finally的return覆盖了。如下代码所示:
function f() {
try {
throw "bogus";
} catch(e) {
console.log('caught inner "bogus"');
throw e; // throw语句被暂停,直到finally执行完成
} finally {
return false; //覆盖try.catch中的throw语句
}
//已经执行了"return false"
}
try {
f();
} catch(e) {
//这里不会被执行,因为catch中的throw已经被finally中的return语句覆盖了
console.log('caught outer "bogus"');
}
//输出
// caught inner "bogus"
系统Error对象:我们可以直接使用Error{name, message}对象,例如:throw (new Error(‘The message’));