IsXxxx && IsXxxxEmpty

251 阅读1分钟

IsXxxx

判断是否是数组/对象

  • Object.prototype.toString(万能方法)
var arr = []
var obj = {}
function isArray (arr) {
    return Object.prototype.toString.call(arr) === '[object Array]';
}
function isObj (obj) {
    return Object.prototype.toString.call(obj) === '[object Object]';
}
isArray(arr) //true
isArray(obj) // false

isObj(arr) // false
isObj(obj) // true
  • constructor(undefined和null不可用🚫)
var arr = []
var obj = {}
function isArray(arr){
    return arr.constructor === Array
}
function isObj(obj){
    return obj.constructor === Object
}
isArray(arr) // true
isArray(obj) // false

isObj(arr) // false
isObj(obj) // true
  • instanceof
var arr = []
var obj = {}
arr instanceof Array // true
obj instanceof Array // false

arr instanceof Object // true(数组也是对象)
obj instanceof Object // true

IsXxxxEmpty

1.判断对象是否为空

  • for in循环
var obj = {};
var obj1 = { id: 1 }
var func = function( obj ){
    for(var key in obj) {
        return false;
    }
    return true;
}
func(obj) // true
func(obj1) // false
  • JSON.stringify()
var obj = {};
var obj1 = { id: 1 }
var func = function(obj){
	return JSON.stringify(obj)== '{}'?true:false
}
func(obj) // true
func(obj1) // false
  • Object.keys()
var obj = {};
var obj1 = { id: 1 }
var func = function(obj){
    return Object.keys(obj).length == 0?true:false
}
func(obj) // true
func(obj1) // false
  • Object.getOwnPropertyNames()【不兼容ie8】
var obj = {};
var obj1 = { id: 1 }
var func = function(obj){
    return Object.getOwnPropertyNames(obj).length == 0?true:false
}
func(obj) // true
func(obj1) // false

Object.keys()和Object.getOwnPropertyNames()区别:

  • Object.keys只适用于可枚举的属性,而Object.getOwnPropertyNames返回对象自动的全部属性名称。

enumerable为false时,Obejct.keys()无法获取key

2.判断数组是否为空

  • arr.length
var arr = []
var arr1 = [1,2,3]
var func = function(arr){
   return arr.length == 0?true:false
}
func(arr) // true
func(arr1) // false
  • Object.keys()
var arr = []
var arr1 = [1,2,3]
var func = function(arr){
    return Object.keys(arr).length == 0?true:false
}
func(arr) // true
func(arr1) // false

综合

function isEmpty(v) {
  return (
    (Array.isArray(v) && v.length == 0) || (Object.prototype.isPrototypeOf(v) && Object.keys(v).length == 0)
  );
}

// 兼容性写法
if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}