摘要:錯(cuò)誤與異常錯(cuò)誤,指程序中的非正常運(yùn)行狀態(tài),在其他編程語言中稱為異常或,錯(cuò)誤。定義一個(gè)全局變量,并賦值對(duì)象的方法綁定在中,構(gòu)造函數(shù)只是一些使用操作符時(shí)被調(diào)用的函數(shù)。包括內(nèi)置對(duì)象函數(shù)在內(nèi)的所有函數(shù)都可以用來調(diào)用,這種函數(shù)調(diào)用被稱為構(gòu)造函數(shù)調(diào)用。
錯(cuò)誤與異常
錯(cuò)誤,指程序中的非正常運(yùn)行狀態(tài),在其他編程語言中稱為‘異?!颍e(cuò)誤’。解釋器為每個(gè)錯(cuò)誤情形創(chuàng)建并拋出一個(gè)Error對(duì)象,其中包含錯(cuò)誤的描述信息。
通過使用JavaScript提供的異常處理語句,可以用結(jié)構(gòu)優(yōu)化的方式捕捉發(fā)生的錯(cuò)誤,讓異常處理代碼核心業(yè)務(wù)代碼實(shí)現(xiàn)分離。
try...catch 語句作為js中處理異常的一種標(biāo)準(zhǔn)方式。try語句標(biāo)記一塊待嘗試的語句,如果該語句出現(xiàn)錯(cuò)誤,則通過catch語句進(jìn)行捕捉。
try { console.log(v);//- 調(diào)用未定義的變量,語法報(bào)錯(cuò) } //用于處理try中出現(xiàn)的錯(cuò)誤 catch (error){ //error - 表示try中出現(xiàn)錯(cuò)誤的信息 console.log(error); } //終結(jié)快 - 無論catch語句是否處理了try語句中的錯(cuò)誤與異常,都會(huì)輸出finally語句中的內(nèi)容 finally { }錯(cuò)誤類型 基本錯(cuò)誤類型
執(zhí)行代碼期間可能會(huì)發(fā)生的錯(cuò)誤類型有多種種類,每種種類都有對(duì)應(yīng)的錯(cuò)誤類型。當(dāng)錯(cuò)誤發(fā)生時(shí),就會(huì)拋出對(duì)應(yīng)類型的錯(cuò)誤對(duì)象。
Error是基本錯(cuò)誤類型,其他錯(cuò)誤類型都繼承于該類型。Error類型的錯(cuò)誤很少見,如果有也是瀏覽器拋出的,這個(gè)基本錯(cuò)誤類型主要目的是提供給開發(fā)人員拋出自定義錯(cuò)誤。
js提供了7種預(yù)定義錯(cuò)誤類型
拋出語句與try...catch語句配合使用的還有throw操作符,用于隨時(shí)拋出定義錯(cuò)誤。拋出錯(cuò)誤是,必須給throw操作符制定一個(gè)值。(值不限類型)
function fn(v) { if (v){ return v; }else { throw {name : "化物語"}; } } //console.log(fn()); /* throw {name : "化物語"}; ^ [object Object] */ var result; try{ result=fn(); }catch (e){ result = "aa" console.log(e.name);//化物語 } console.log(result);//aathis關(guān)鍵字 概述 this是什么
this是js中最復(fù)雜的機(jī)制之一。它是一個(gè)很特別的關(guān)鍵字,被自動(dòng)定義在所有函數(shù)的作用域中。
this都有一個(gè)共同點(diǎn),他總是范慧慧一個(gè)對(duì)象?;蛘哒f,this就是屬性或方法‘當(dāng)前’所在的對(duì)象。
this可以使API設(shè)計(jì)變得更加簡潔并且易于復(fù)用。
調(diào)用位置想要了解this的綁定過程,首先要理解調(diào)用位置:調(diào)用位置就是函數(shù)在代碼中被調(diào)用的位置(不是聲明的位置)。
var v = 100; function fun() { console.log(this.v); } fun();//undefined(全局對(duì)象不可用)若全局對(duì)象可用為100 var obj ={ v : 200, f : fun }; obj.f();//200 當(dāng)前this指向?qū)ο髈bj綁定規(guī)則 默認(rèn)綁定
在一個(gè)函數(shù)中使用this,當(dāng)該函數(shù)被獨(dú)立調(diào)用。可以把這條規(guī)則看作是無法應(yīng)用其他規(guī)則時(shí)的默認(rèn)規(guī)則。
function fun (){ console.log(this.v);//當(dāng)前this指向全局對(duì)象 } //全局變量 var v = 2; //函數(shù)調(diào)用 fun();//2 - 全局對(duì)象可用隱式綁定
隱式綁定的規(guī)則需要考慮的是調(diào)用位置是否有上下文對(duì)象,或者說是否被某個(gè)對(duì)象擁有或者包含。(說法不準(zhǔn)確)。
function fun (){ console.log(this.v);//當(dāng)前this指向?qū)ο髈bj } //定義對(duì)象 var obj = { v : 23, f : fun } obj.f();//23隱式綁定丟失
隱式丟失是最常見的this問題,指的是被隱式綁定的函數(shù)會(huì)丟失綁定對(duì)象,也就是說會(huì)應(yīng)用默認(rèn)綁定,把this綁定到全局對(duì)象上。
function fun(){ console.log(this.v); } var obj { v : 23, f : fun } //定義一個(gè)全局變量,并賦值對(duì)象obj的f方法 var foo = obj.f foo();//undefined - this綁定到了全局對(duì)象顯示綁定
顯示綁定就是明確在調(diào)用時(shí),this綁定的對(duì)象??梢允褂胊pply()方法和call()方法實(shí)現(xiàn)。
這兩個(gè)方法的第一個(gè)參數(shù)就收的是一個(gè)對(duì)象,會(huì)把這個(gè)對(duì)象綁定帶this上,接著在調(diào)用函數(shù)時(shí)制定這個(gè)this。
function fun(){ console.log(this.v); }; var obj { v : 23, f : fun }; //定義一個(gè)全局變量,并賦值對(duì)象obj的f方法 var foo = obj.f; foo.call(obj);//23new綁定
在js中,構(gòu)造函數(shù)只是一些使用new操作符時(shí)被調(diào)用的函數(shù)。包括內(nèi)置對(duì)象函數(shù)在內(nèi)的所有函數(shù)都可以用new來調(diào)用,這種函數(shù)調(diào)用被稱為構(gòu)造函數(shù)調(diào)用。
使用new來調(diào)用函數(shù),會(huì)執(zhí)行以下操作
創(chuàng)建一個(gè)全新的對(duì)象
這個(gè)對(duì)象會(huì)綁定到函數(shù)調(diào)用的this
如果函數(shù)沒有返回其他對(duì)象,那么new表達(dá)式中的函數(shù)調(diào)用會(huì)自動(dòng)返回這個(gè)新對(duì)象
function Fun(name){ this.name = name }; var fun = new Fun"花"; console.log(fun.name);//花實(shí)現(xiàn)繼承
function fun() { this.name = "火鍋"; } //將fun繼承于Fu function Fu(){ fun.call(this); this.age = 2; } var fu= new Fu(); console.log(fu.name);//火鍋 console.log(fu.age);//2綁定例外 被忽略的this
如果將bull或者undefined作為this的綁定對(duì)象傳入call、apply、bind,這些值在調(diào)用時(shí)會(huì)被忽略,實(shí)際應(yīng)用的是默認(rèn)綁定規(guī)則。
function fun (){ console.log(this.v); }; var v = 23 fun.call(null);//23 - 全局對(duì)象可用的情況下間接引用
有可能有意或無意的創(chuàng)建一個(gè)函數(shù)的‘間接引用’,在這種情況下,調(diào)用這個(gè)函數(shù)會(huì)應(yīng)用默認(rèn)綁定規(guī)則。
間接引用最容易在賦值時(shí)發(fā)生。
function fun (){ console.log(this.a) } var a = 2; var o ={ a : 3, foo = fun; }; var p ={a:4}; o.foo();//3 (p.foo = o.foo)()//2
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96936.html
摘要:一錯(cuò)誤與異常概述錯(cuò)誤,指程序中的非正常運(yùn)行狀態(tài),在其它語言中稱為異常或錯(cuò)誤將每個(gè)錯(cuò)誤中創(chuàng)建個(gè)對(duì)象,描述包含的錯(cuò)誤信息通過使用提供異常的處理語句,可以用結(jié)構(gòu)化方式捕捉發(fā)生錯(cuò)誤,異常處理代碼與核心代碼實(shí)現(xiàn)分離語句語句是指中處理異常一種標(biāo)準(zhǔn)方式, JS(JavaScript)一.錯(cuò)誤與異常1.概述錯(cuò)誤,指程序中的非正常運(yùn)行狀態(tài),在其它語言中稱為異?;蝈e(cuò)誤將每個(gè)錯(cuò)誤中創(chuàng)建個(gè)Error對(duì)象,描述...
摘要:通過使用提供的異常處理語句,可以用結(jié)構(gòu)化的方式來捕捉發(fā)生的錯(cuò)誤,讓異常處理帶啊與核心業(yè)務(wù)代碼實(shí)現(xiàn)分離。錯(cuò)誤與異常處理在應(yīng)用中的重要性是毋庸置疑的。包括內(nèi)置對(duì)象函數(shù)在內(nèi)的所有函數(shù)都可以用來調(diào)用,這種函數(shù)調(diào)用被稱為構(gòu)造函數(shù)調(diào)用。 錯(cuò)誤與異常 概念 錯(cuò)誤與異常是什么錯(cuò)誤,指程序中的費(fèi)正常運(yùn)行狀態(tài),在其他編程語言中稱為‘異?!颉e(cuò)誤’。解釋器會(huì)為每一個(gè)錯(cuò)誤創(chuàng)建并拋出一個(gè)Error對(duì)象,其中包...
摘要:幸運(yùn)的是,使用符號(hào)創(chuàng)建的構(gòu)造器,如果在不使用來調(diào)用,則始終會(huì)報(bào)錯(cuò),即使在非嚴(yán)格模式下也不會(huì)產(chǎn)生問題。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Bugs and Errors 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript 編程精解(第 2 版)》 調(diào)試的難度是開始編寫代碼的兩倍。 因此,如...
摘要:汪汪汪哈士奇大黃狗輸出結(jié)果為這樣寫依然存在問題全局變量增多,會(huì)增加引入框架命名沖突的風(fēng)險(xiǎn)代碼結(jié)構(gòu)混亂,會(huì)變得難以維護(hù)想要解決上面的問題就需要用到構(gòu)造函數(shù)的原型概念 showImg(https://segmentfault.com/img/remote/1460000017534338?w=1440&h=900); JS高級(jí) 前言 經(jīng)過前面幾篇文章的學(xué)習(xí),相信大家已經(jīng)對(duì)js有了大部分的理...
摘要:不支持嚴(yán)格模式的瀏覽器與嚴(yán)格模式的瀏覽器行為也不一樣,所以不要在未經(jīng)嚴(yán)格模式特性測試情況下使用嚴(yán)格模式。在嚴(yán)格模式下,使用上述標(biāo)識(shí)符作為變量名會(huì)導(dǎo)致語法錯(cuò)誤。嚴(yán)格模式下,命名參數(shù)與對(duì)象是完全獨(dú)立的。在嚴(yán)格模式下,函數(shù)的值始終是指定的值。 嚴(yán)格模式 概述 嚴(yán)格模式是什么 嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種模式。嚴(yán)格模式不是一個(gè)子集:它的語義上與正常代碼有著明顯的差異。...
閱讀 2273·2023-04-25 14:50
閱讀 1273·2021-10-13 09:50
閱讀 1874·2019-08-30 15:56
閱讀 1853·2019-08-29 15:29
閱讀 2892·2019-08-29 15:27
閱讀 3569·2019-08-29 15:14
閱讀 1205·2019-08-29 13:01
閱讀 3306·2019-08-26 14:06