JavaScript中undefined和is?not?defined的區(qū)別與異常處理
Javascript中undefined和not defined有什么區(qū)別?
概念上的解釋:
undefined是javascript語言中定義的五個原始類中的一個,換句話說,undefined并不是程序報錯,而是程序允許的一個值。
not defined是javascript在運行我們的javascript代碼時,遇到?jīng)]有定義就用來運算的變量時爆出來的錯誤。
那么問題來了:在許多的javascript教程中都介紹有javascript變量即使不定義也可以直接拿來使用,但是請注意,這個使用是指可以被賦值,但是不可以被運算。看一個例子
var temp; temp2 = 123; alert(temp2); temp3 = temp4+1; alert(temp3);
在上面的代碼中,第一個alert可以正常彈窗為123;但是第二個alert是不會執(zhí)行的,因為使用了沒有定義的temp4來運算,這是不允許的。
接下來再看一個例子:
var temp; alert(temp); alert(typeof temp); alert(typeof temp2); alert(temp==undefined); alert(temp2==undefined);
在這個示例中:
第一個、第二個和第三個alert可以彈出提示undefined;但其實這三個undefined的含義是不一樣的。在javascript中,undefined是一個類,這個類只有一個值就是undefined,第一個alert彈出的就是值undefined,第二個和第三個彈出的是undefined這個類名。
第四個alert會彈出true,這是一個判斷。
第五個alert不會彈出,因為報錯了。這里爆出的錯誤就是因為使用了沒有定義的變量進行運算。爆出的錯誤是temp2 is not defined;(不同的瀏覽器可能說法不同)
JavaScript中undefined和is not defined異常
不解釋,直接上代碼:
console.log(xx); console.log(window.xx);
(其中xx是一個不存在的變量)
當直接打印xx變量時,直接拋出一個is not defined異常并終止執(zhí)行。
然而將xx變量以window.xx的形式打印出來時,缺直接輸出一個undefined,并沒有出現(xiàn)異常,可以繼續(xù)執(zhí)行。
查閱相關(guān)文檔之后才知道,打印undefined說明該變量已經(jīng)聲明,但沒有賦值;打印is not defined異常說明該變量連聲明都沒有。通過這條結(jié)論說明,window.xx的形式會在window對象中隱式的聲明該變量。
這也說明了,為什么以下代碼可以直接運行了。
window.xx = 2; console.log(window.xx);
另外有個一個相關(guān)的問題,見代碼:
function t1() { console.log(str2); //undefined var str2 = 'mike'; } t1(); 和 function t1() { console.log(str2); //is not defined str2 = 'mike'; } t1();
第一種情況涉及到JavaScript的運行階段,分為詞法分析階段和運行階段,在詞法分析階段時,先聲明了str2變量但沒有賦值,所以在運行階段就出現(xiàn)了undefined。
第二種情況在詞法分析階段也無法聲明str2,因為沒有var關(guān)鍵字聲明,所以在運行階段直接拋出異常。
還有一點需要注意的是,凡是沒有使用var聲明的變量,最終都會成為全局對象window的屬性,如下代碼:
function t1() { a = 10 console.log(a);//10 console.log(window.a);//10 } t1();
總結(jié)
到此這篇關(guān)于JavaScript中undefined和is not defined區(qū)別與異常處理的文章就介紹到這了,更多相關(guān)js undefined和is not defined區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Javascript基于OOP實實現(xiàn)探測器功能代碼實例
這篇文章主要介紹了Javascript基于OOP實實現(xiàn)探測器功能代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08JavaScript中字符串分割函數(shù)split用法實例
這篇文章主要介紹了JavaScript中字符串分割函數(shù)split用法,實例分析了javascript中split函數(shù)操作字符串的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04關(guān)于對TypeScript泛型參數(shù)的默認值理解
泛型可以理解為寬泛的類型,通常用于類和函數(shù),下面這篇文章主要給大家介紹了關(guān)于對TypeScript泛型參數(shù)默認值的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07