JS(JavaScript)
一.错误与异常
1.概述
错误,指程序中的非正常运行状态,在其它语言中称为异常或错误将每个错误中创建个Error对象,描述包含的错误信息
通过使用JavaScript提供异常的处理语句,可以用结构化方式捕捉发生错误,异常处理代码与核心代码实现分离
2.try...catch语句
- try...catch语句
是指JavaScript中处理异常一种标准方式,try语句是为尝试,如出现错误,则以catch语句进行捕获
try{
//用于捕获指定语句中错误与异常
console.log(v);
// 调用未定义变量-语法报错
}
catch(error) {
//e-表示try语句中出现错误信息
console.log(error);
}
finally {
console.log(error);
}
3.错误类型
- throw语句
用来抛出一个用户自定义的异常,throw后的语句将不会被执行,且控制被传递到调用第一个catch块,如没有catch块,将终止程序
function fn(v) {
if (v) {
} else {
throw { name : '犬夜叉'};
}
}
// console.log(fn(10));//10
// console.log(fn());
var result;
try {
result = fn();
} catch (e) {
result = 'unkown';
console.log(e.name);
}
console.log(result);
二.this关键字
1.概述
定义个函数并一定要返回个对象,通过调用定义对象的位置
- this基本用法
//定义一个全局变量
var v = 100;
//this经常定义在函数的作用域中
function fn() {
//this总是要返回一个对象
console.log(this.v);
// this指向哪个对象不取决于函数定义位置
}
//this指向哪个对象,取决于调用的位置
//fn();//函数的调用
// 定义个对象,将fn函数作为obj对象的方法
var obj = {
v : 200,
f : fn
}
console.log(this.v);
2.绑定规则
- 隐式绑定丢失
是指被隐式绑定函数丢失绑定对象,则为默认绑定,从而把this绑定到全局对象
var v = 100;
//定义哥全局变量
function fn() {
//定义个函数
console.log(this.v);
}
var obj = {
v : 200,
f : fn
//对象的f()方法指向fn()函数
}
//定义个全局变量,并被赋值为对象obj的f()方法
var fun = obj.f;
//将fun作为个函数进行调用
fun();
- 显式绑定
明确在调用时,this绑定对象,JS提供这apply()和call()两个方法实现,第一个参数接收是个对象,把这对象绑定this,接着调用函数是这个this
var v = 100;
//定义哥全局变量
function fn() {
//定义个函数
console.log(this.v);
}
var obj = {
v : 200,
f : fn
//对象的f()方法指向fn()函数
}
//定义个全局变量,并被赋值为对象obj的f()方法
var fun = obj.f;
//将fun作为个函数进行调用
fun.apply(obj);
- new绑定
在JS中构造函数使用new操作符调用函数,内置包括对象函数所有函数都可以调用函数
1新创建个全新对象
2新对象绑定到函数调用this
3该函数如没有返回其它对象,则new表达式的函数会返回到新的对象
function Hero(name) {
this.name = name;
}
var hero1 = new Hero('犬夜叉');
var hero2 = new Hero('戈薇');
3.绑定例外
- 被忽略的this
null和undefined绑定在this对象,以call,apply或bind调用会被忽略
function fn(){
//定义个函数
console.log(this.v);
}
var v = 100;
//定个全局变量
fn.call(null);//undefined
//用call来调用函数
var result = Math.max.apply(null, [1,2,3,4,5,2,3]);
console.log(result);
- 间接引用
有意无意的创建个函数,并调用这个函数为默认绑定
function foo() {
console.log( this.a );
}
var a = 2;
var o = {
a: 3,
foo: foo
};
o.foo(); // 3
var p = { a: 4 };
// p.foo = o.foo;
// p.foo();// 4
(p.foo = o.foo)(); // 2