//判斷參數是否爲空函數
isEmpty = function (obj) {
//檢驗null和undefined
if (!obj && obj !== 0 && obj !== '') {
return true;
}
//檢驗數組
if (Array.prototype.isPrototypeOf(obj) && obj.length === 0) {
return true;
}
//檢驗對象
if (Object.prototype.isPrototypeOf(obj) && Object.keys(obj).length === 0) {
return true;
}
return false;
isPrototypeOf() 方法用於測試一個對象是否存在於另一個對象的原型鏈上。即判斷 Object 是否存在於 obj 的原型鏈上。需要注意的是,js 中一切皆是對象,也就是說,Object 也存在於數組的原型鏈上,因此這裏數組需要先於對象檢驗。
ps:isPrototypeOf和instanceof操作不一樣的。在表達式 object instanceof AFunction 中,檢測的是 AFunction.prototype是否在object的原型鏈中,而不是檢測 AFunction 自身。
該方法屬於 ES3 標準,現代瀏覽器均支持,包括 IE。 <( ̄︶ ̄)>
Object.keys() 方法會返回一個由給定對象的自身可枚舉屬性組成的數組,數組中屬性名的排列順序和使用 for…in 循環遍歷該對象時返回的順序一致、
該方法屬於 ES5 標準,IE9 以上和其它現代瀏覽器均支持。如果你很不幸的需要兼容 IE9以下瀏覽器,那就用 for…in 代替吧。但是,for…in 會將對象原型鏈上的屬性也枚舉出來,因此還需要加個判斷
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
return false;
}
}
hasOwnProperty()屬於 ES3 標準,現代瀏覽器均支持,包括 IE。可以放心使用啦。 <( ̄︶ ̄)>。還有一種很特別的檢驗空對象或空數組的方法,就是使用 JSON.stringify():
JSON.stringify(obj) === '{}';
JSON.stringify(obj) === '[]'