簡單方法判斷JavaScript對(duì)象為null或者屬性為空

字號(hào):


    首先說下null與undefined區(qū)別:
    對(duì)已聲明但未初始化的和未聲明的變量執(zhí)行typeof,都返回"undefined"。
    null表示一個(gè)空對(duì)象指針,typeof操作會(huì)返回"object"。
    一般不顯式的把變量的值設(shè)置為undefined,但null相反,對(duì)于將要保存對(duì)象的變量,應(yīng)明確的讓該變量保存null值。
    ?1234567 var bj; alert(bj); //"undefined" bj = null; alert(typeof bj); //"object" alert(bj == null); //true bj = {}; alert(bj == null); //false
    下面兩個(gè)函數(shù)是鄧師兄給我的,感謝啊。
    ?123456789101112 /* * 檢測(cè)對(duì)象是否是空對(duì)象(不包含任何可讀屬性)。 * 方法既檢測(cè)對(duì)象本身的屬性,也檢測(cè)從原型繼承的屬性(因此沒有使hasOwnProperty)。 */function isEmpty(obj) { for (var name in obj) { return false; } return true; };
    這里所說的空對(duì)象,到底是 {} 還是 null . 我寫了一個(gè)測(cè)試用例。
    ?12345678910111213141516171819202122232425 var a = {}; a.name = 'realwall'; console.log(isEmpty(a)); //false console.log(isEmpty({})); //true console.log(isEmpty(null)); //true //注意參數(shù)為null時(shí)無語法錯(cuò)誤哦,即雖然不能對(duì)null空指針對(duì)象添加屬性,但可以使用for in 語句    ? /* * 檢測(cè)對(duì)象是否是空對(duì)象(不包含任何可讀屬性)。 * 方法只既檢測(cè)對(duì)象本身的屬性,不檢測(cè)從原型繼承的屬性。 */function isOwnEmpty(obj) { for(var name in obj) { if(obj.hasOwnProperty(name)) { return false; } } return true; };
    {}與null的區(qū)別:
    這個(gè)東西很重要。
    ?1234567 var a = {}; var b = null; a.name = 'realwall'; b.name = 'jim'; //這里會(huì)報(bào)錯(cuò),b為空指針對(duì)象,不能像普通對(duì)象一樣直接添加屬性。 b = a; b.name = 'jim'; //此時(shí) a 和 b 指向同一個(gè)對(duì)象。a.name, b.name 均為'jam'