生活随笔
收集整理的這篇文章主要介紹了
JavaScript的undefined
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?我們知道,javascript是一種泛類型的語言。泛類型意味著不必顯式定義變量的數據類型。事實上,我們無法在 javascript 上明確地定義數據類型。而只能通過var語句顯示聲明變量:var myvar;
或這樣隱式聲明變量:myvar=myvarValue(省略var,在聲明的同時初始化)。
javascript有三種基本數據類型(字符串、數值、布爾 ),兩種引用數據類型(對象、數組)和兩種特殊數據類型(Null 、Undefined )。對于基本數據類型和引用數據類型我們很好理解。對于特殊數據類型Null和Undefined,常常會引起我們的一些疑惑。
在 Javascript 中數據類型 Null 只有一個值:null。如果一個變量的值為null ,那么表示該變量沒有保存有效的數、字符串、Boolean、數組或對象,null與vbscript中Empty的概念不相同(Empty指未初始化的變量值)。因此,我們可以通過給一個變量賦 null 值來清除變量的內容。
考查下面的代碼:
function test1()
{
?var a=null;
?alert("typeof(a):"+typeof(a));
?alert("a==0:"+(a==0));
}
結果顯示:typeof(null)返回的對象類型為Object,而非類型null。這點潛在的混淆是為了向下兼容。同時,在 Javascript 中,null 與 0 不相等。
如果已聲明了一個變量但還沒有初始化,那么該變量的值就是?undefined。這與vbscript中Empty的概念是相同的。
如下情況使返回 undefined 值:?
1、對象屬性不存在;
2、聲明了變量但從未賦值。
//注意:很多人常犯的一個錯誤是:當他定義一個變量的時候未初始化,想當然地認為該變量的默認值為數字0字符串""。
我們在javascript中如何判斷一個變量是否存在,可以使用如下方法:
function test2()
{
?var a;
?alert(typeof(a)==undefined);//false
?alert(typeof(a)=="undefined");//true
?alert(a==undefined);//true
}
//注意:我們可以通過與undefined做比較測試一個變量是否初始化,但不能通過與 undefined 做比較來測試一個變量是否存在,而只能通過typeof(variable)=="undefined"來判斷!
下面的例子將證明我的這一提示的正確性:
function test3()
{
?var a;
?//alert(b==undefined);//出現錯誤:'b'未定義
?alert(typeof(b)=="undefined");//true?
}
undefined 值與null做比較,考查下面的代碼:
<script?type="text/javascript">?????function?myObject(prop1,prop2)?????{??????this.prop1=prop1??????this.prop2=prop2?????}?????var?myObj?=?new?myObject(null,"test")?????alert("myObject.prop1?==?null:"+(myObj.prop1==null))//true?????alert("myObj.prop1==undefined:"+(myObj.prop1==undefined))//true?????alert("myObj.prop2==undefined:"+(myObj.prop2==undefined))//false?????alert("myObj.prop3==undefined:"+(myObj.prop3==undefined))//true??????????var?my?????for(prop?in?myObj){?????????my+=prop+","//my-->undefinedprop1,prop2,?????}?????alert("my-->"+my)?????alert("prop3?exists?:"+(("prop3"?in?myObj)?"YES":"NO"))//NO??</script>? 總結:undefined 值與null做比較,如下情況時,比較的結果為?true:
1、屬性 myObj.prop1 包含null 值;
2、屬性 myObj.prop3 不存在。
3、typeof(b)=="undefined" 不存在返回true,?存在但沒初始化也返回true啊?
<script?type="text/javascript">?????function?test1()?????{??????var?a=null;??????alert("typeof(a):"+typeof(a));//object??????alert("a==0:"+(a==0));//false?????}?????function?test2()?????{??????var?a;??????alert(typeof(a)==undefined);//false??????alert("1")??????alert(typeof(a)=="undefined");//true?沒有初始化??????alert("2")??????alert(a==undefined);//true?沒有初始化??????alert("3")?????}?????function?test3()?????{??????var?a;?????//?alert(b==undefined);//出現錯誤:'b'未定義??b?is?not?defined??????alert(typeof(b)=="undefined");//true?只能通過typeof(variable)=="undefined"來判斷!??????//typeof(b)=="undefined"?但是在上面沒有初始化的時候也返回true。不存在返回true,??????//存在但沒初始化也返回true啊??????alert(typeof(a)=="undefined");//true??????}?????test1()??????????function?myObject(prop1,prop2)?{??this.prop1=prop1??this.prop2=prop2?}?????var?myObj?=?new?myObject(null,"test")?????alert("myObject.prop1?==?null:"+(myObj.prop1==null))//true?????alert("myObj.prop1==undefined:"+(myObj.prop1==undefined))//true?????alert("myObj.prop2==undefined:"+(myObj.prop2==undefined))//false?????alert("myObj.prop3==undefined:"+(myObj.prop3==undefined))//true??????var?my?????for(prop?in?myObj){?????????my+=prop+","//my-->undefinedprop1,prop2,?????}?????alert("my-->"+my)?????alert("prop3?exists?:"+(("prop3"?in?myObj)?"YES":"NO"))//NO??/script>?
轉載于:https://blog.51cto.com/2301703/1056764
總結
以上是生活随笔為你收集整理的JavaScript的undefined的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。