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]';
};
}