undefined與null的區別
現在再去聊這個的話基本上大家都很熟悉了,對於新手來說可以加強鞏固吧。因為阮一峰老師的文章裏面已經寫很明白 《undefined與null的區別》
null:空對象指針 -> 沒有具體的值 -> 一般都是我們手動設置初始的值為null,後期的話會給其賦值
undefined:未定義 -> 連東西都沒有 -> 一般都是瀏覽器默認的值
null
1、我們設定一個變量,後期需要使用,那麽前期我們設置默認值為null
1 var timer=null; 2 function move(){ 3 window.clearTimeout(timer);4 timer=window.setTimeout(move,1000); 5 } 6 move();
2、在JS內存釋放中,我們想釋放一個堆內存,就讓其值變為null即可
1 var obj={name:"珠峰培訓"}; 2 obj=null; -> 剛開始開辟的這個堆內存沒有被占用,瀏覽器會在空閑的時候把它銷毀掉
3、我們通過DOM中提供的屬性和方法獲取頁面中的某一個元素標簽,如果當前這個標簽不存在,獲取的結果是null,而不是undefined
1 document.getElementById("div1") -> 如果頁面中沒有#div1,獲取的結果就是null
4、在正則的exec/字符串的match捕獲中,如果當前要捕獲的字符串和正則不匹配的話,捕獲到的結果為null
1 var reg=/\d+?/g; 2 var str="zhufengpeixun"; 3 reg.exec(str) ->null 4 str.match(reg) ->null
undefined
1、在JS預解釋的時候,只聲明未定義,默認的值是undefined
1 console.log(num); ->undefined 2 var num=13;
2、在一個函數中,如果沒有寫return,或者return後啥都沒返回,默認的返回值是undefined
1 function fn(){ 2 3 } 4 var res=fn(); 5 console.log(res);->undefined
3、函數中設置了形參,但是執行的時候如果沒有傳遞參數值,那麽形參默認值是undefined
1 function fn(a,b,c){ 2 a->10 3 b->20 4 c->undefined ->arguments[2]=30 : 讓形參c的值變為30,因為在非嚴格模式下我們的arguments和形參存在映射關系,但是在嚴格模式("use strict")中是不存在映射關系,改變的話互不影響; 5 } 6 7 fn(10,20);
4、獲取一個對象的屬性名對應的屬性值,如果當前的這個屬性名不存在的話,屬性值默認是undefined
var obj={}; console.log(obj.name); ->undefined
->我們也應用這個道理來檢測當前的瀏覽器是否兼容某一個方法
window.getComputedStyle ->獲取當前元素經過瀏覽器計算過的樣式
在谷歌中:我們獲取的結果是 function getComputedStyle() { [native code] }
在IE6~8中:我們獲取的結果是undefined,因為在這個瀏覽器中不兼容getComputedStyle
1 function getCss(curEle,attr){ 2 var val=null,reg=null; 3 if(window.getComputedStyle){ 4 //->兼容 5 val=window.getComputedStyle(curEle,null)[attr]; 6 }else{ 7 //->不兼容 8 if(attr==="opacity"){ 9 val=curEle.currentStyle["filter"]; ->‘alpha(opacity=12.345)‘; 10 reg=/^alpha\(opacity=(\d+(?:\.\d+)?)\)$/; 11 val=reg.test(val)?reg.exec(val)[1]/100:1; 12 }else{ 13 val=curEle.currentStyle[attr]; 14 } 15 } 16 reg=/^-?\d+(\.\d+)?(px|pt|em|rem)?$/; 17 return reg.test(val)?parseFloat(val):val; 18 }
undefined與null的區別