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