JS(JavaScript)
一.错误与异常
1.概述
错误,指程序中的非正常运行状态,在其它语言中称为异常或错误将每一个错误中建立个Error对象,描述包含的错误信息
经过使用JavaScript提供异常的处理语句,能够用结构化方式捕捉发生错误,异常处理代码与核心代码实现分离
2.try...catch语句app
是指JavaScript中处理异常一种标准方式,try语句是为尝试,如出现错误,则以catch语句进行捕获函数
try{ //用于捕获指定语句中错误与异常 console.log(v); // 调用未定义变量-语法报错 } catch(error) { //e-表示try语句中出现错误信息 console.log(error); } finally { console.log(error); }
3.错误类型this
用来抛出一个用户自定义的异常,throw后的语句将不会被执行,且控制被传递到调用第一个catch块,如没有catch块,将终止程序code
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.概述
定义个函数并必定要返回个对象,经过调用定义对象的位置对象
//定义一个全局变量 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.绑定规则ip
是指被隐式绑定函数丢失绑定对象,则为默认绑定,从而把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,接着调用函数是这个thisio
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);
在JS中构造函数使用new操做符调用函数,内置包括对象函数全部函数均可以调用函数
1新建立个全新对象
2新对象绑定到函数调用this
3该函数如没有返回其它对象,则new表达式的函数会返回到新的对象console
function Hero(name) { this.name = name; } var hero1 = new Hero('犬夜叉'); var hero2 = new Hero('戈薇');
3.绑定例外function
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