最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用try-catch判斷變量是已聲明未聲明還是未賦值

 更新時間:2014年03月12日 16:49:49   作者:  
這篇文章主要介紹了利用try-catch判斷變量是已聲明未賦值還是未聲明,需要的朋友可以參考下
目的是如果一個變量是已聲明未賦值,就可以直接賦值;并且不能改變變量的作用域

如果未聲明的話,就重新聲明,

在網(wǎng)上搜了下,常見的方法是if(typeof(a)=='undefined'){var a='ss';},

但是這種方法對未聲明或已聲明未賦值的變量都會返回true。而且如果是這樣:
復制代碼 代碼如下:

var a;
function f(){
if(typeof(a)=='undefined')
{var a=1;}
}
f();
console.log(a);

會顯示undefined,因為f()里面只是聲明了一個同名的局部變量。

但是如果是已聲明未賦值的變量:if(noValueV==null),會返回true;

未聲明的變量:if(noDeclareV==null),會報錯。

所以可以這樣:
復制代碼 代碼如下:

function f( ){
if(typeof(v)=='undefined'){
try{
if(v==null)//說明v是已聲明未賦值
v=1; //如果v是全局變量,這樣不會改變它的作用域
}
catch(err){//說明v是未聲明
var v;v=2;
}
}
console.log(v);
}
f( );

這樣也是不對的,因為js有‘聲明提前'的特性,即函數(shù)內(nèi)聲明的變量在這個函數(shù)里和這個函數(shù)的子函數(shù)里都是可見的,不管它具體是在函數(shù)內(nèi)的哪個位置聲明的。

所以由于上面里的var v;導致不管哪種情況都是只走try。

修改一下:
復制代碼 代碼如下:

function f( ){
if(typeof(v)=='undefined'){
try{
if(v==null)//說明v是已聲明未賦值
v=1; //如果v是全局變量,這樣不會改變它的作用域
}
catch(err){//說明v是未聲明
eval('var v');v=2; //這里不一樣
}
}
console.log(v);
}
f( );

這樣就可以了。

寫成一個判斷函數(shù),返回'noDeclare'表示變量未聲明,'noValue'表示變量已聲明未賦值,'hasValue'表示變量已聲明已賦值:
復制代碼 代碼如下:

function f(v){
if(typeof(v)=='undefined'){
try{
if(v==null)
return 'noValue';
}
catch(err){
return 'noDeclare';
}
}
else return 'hasValue';
}
var a;
console.log(f(a));
a=0;
console.log(f(a));
console.log(f(b));

又錯了......console.log(f(b));時會報錯......

相關文章

  • js中的閉包學習心得

    js中的閉包學習心得

    這篇文章主要介紹了js中的閉包學習心得以及重要點的代碼寫法,對此有興趣的朋友跟著小編一起學習下吧。
    2018-02-02
  • JavaScript類型檢測之typeof 和 instanceof 的缺陷與優(yōu)化

    JavaScript類型檢測之typeof 和 instanceof 的缺陷與優(yōu)化

    在javascript中,typeof 和 instanceof 是用來判斷數(shù)據(jù)類型比較通用的兩個方法,這篇文章的目的是通過對這兩個方法介紹來分析其存在的不足并提出優(yōu)化方案
    2016-01-01
  • JS?中的URLSearchParams?對象操作(以對象的形式上傳參數(shù)到url)

    JS?中的URLSearchParams?對象操作(以對象的形式上傳參數(shù)到url)

    這篇文章主要介紹了JS中URLSearchParams的基本用法,本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 使用openSpeDiv方法實現(xiàn)Ecshop登錄彈窗框效果

    使用openSpeDiv方法實現(xiàn)Ecshop登錄彈窗框效果

    在ECSHOP的目錄/JS/common.js中有一個openSpeDiv方法是實現(xiàn)ECSHOP的彈窗效果的。接下來通過本文給大家分享使用openSpeDiv方法實現(xiàn)Ecshop登錄彈窗框效果,需要的朋友參考下
    2017-03-03
  • 解決小程序無法觸發(fā)SESSION問題

    解決小程序無法觸發(fā)SESSION問題

    這篇文章主要介紹了解決小程序無法觸發(fā)SESSION問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 子窗口、父窗口和Silverlight之間的相互調(diào)用

    子窗口、父窗口和Silverlight之間的相互調(diào)用

    前兩天做 silverlight 的東西,主頁面打開一個子頁面,然后子頁面中包含一個 silverlight 應用程序那難免會涉及到他們?nèi)呦嗷フ{(diào)用的問題
    2010-08-08
  • 在iframe中使bootstrap的模態(tài)框在父頁面彈出問題

    在iframe中使bootstrap的模態(tài)框在父頁面彈出問題

    這篇文章主要介紹了在iframe中使bootstrap的模態(tài)框在父頁面彈出問題,解決方法非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-08-08
  • JS實現(xiàn)點餐自動選擇框(案例分析)

    JS實現(xiàn)點餐自動選擇框(案例分析)

    這篇文章主要介紹了JS實現(xiàn)點餐自動選擇框功能,點擊上方全選和全不選選擇框?qū)崿F(xiàn)對應功能,本文分步驟通過實例代碼講解的非常詳細,需要的朋友可以參考下
    2019-12-12
  • Three.js入門之hello world以及如何繪制線

    Three.js入門之hello world以及如何繪制線

    這篇文章主要給大家介紹了關于Three.js入門之hello world以及如何繪制線的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • JavaScript 代碼分割的實現(xiàn)步驟

    JavaScript 代碼分割的實現(xiàn)步驟

    JavaScript代碼分割是一種優(yōu)化策略,通過將代碼拆分成較小的塊,只在需要時加載,可以降低初始加載時間,減小頁面體積,本文主要介紹了JavaScript代碼分割的實現(xiàn)步驟,感興趣的可以了解一下
    2024-01-01

最新評論

长宁县| 彭泽县| 西乡县| 廉江市| 陵水| 东海县| 阜南县| 遂溪县| 广南县| 英山县| 泰顺县| 麟游县| 大渡口区| 墨脱县| 石门县| 辽源市| 韩城市| 广饶县| 巴彦县| 关岭| 泗水县| 买车| 镇平县| 巴彦淖尔市| 政和县| 长岭县| 专栏| 绥中县| 溆浦县| 六盘水市| 安图县| 南昌县| 林州市| 巴南区| 肃宁县| 东港市| 政和县| 乐陵市| 临湘市| 惠水县| 蓬安县|