js 判斷是否為空對象、空數組


當需要判斷參數是否為空時,總希望 js 能夠提供原生的判斷方法,可惜並沒有,只能自己封裝了。

function isEmpty(obj) {
  // 檢驗 undefined 和 null
  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 operator 是不一樣的。在表達式 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) === '[]'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM