1. 程式人生 > >undefined與null的區別

undefined與null的區別

文章 字符 ole move tar 返回值 size 設置 blank

現在再去聊這個的話基本上大家都很熟悉了,對於新手來說可以加強鞏固吧。因為阮一峰老師的文章裏面已經寫很明白 《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的區別