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