01判断数组、对象、空对象

360 阅读1分钟
// 判断是否是数组
// https://www.cnblogs.com/echolun/p/10287616.html


// instanceof运算符用于检验构造函数的prototype属性是否出现在对象的原型链中的任何位置,返回一个布尔值。
let a = []
console.log(a instanceof Array);

let b = {}
console.log(b instanceof Array);

// 通过constructor判断,实例的构造函数属性constructor指向构造函数,那么通过constructor属性也可以判断是否为一个数组。
let a = [1,3,4];
console.log(a.constructor === Array)

// 通过Object.prototype.toString.call()判断
let a = [1,2,3]
Object.prototype.toString.call(a) === '[object Array]';

// 通过Array.isArray()判断
let a = [1,2,3]
Array.isArray(a);


// 判断是否是对象

// let a = {}
// console.log(a instanceof Object);

// 通过Object.prototype.toString.call()判断
let a = { test: 1 }
Object.prototype.toString.call(a) === '[object Object]';

// 通过constructor判断,实例的构造函数属性constructor指向构造函数,那么通过constructor属性也可以判断是否为一个数组。
let b = { test: 123 }
console.log(a.constructor === Object)


// 判断对象是否为空对象 js

// 最常见的思路,for...in...遍历属性,为真则为“非空数组”;否则为“空数组”
for (var i in obj) { // 如果不为空,则会执行到这一步,返回true
  return true
}
return false // 如果为空,返回false



// 通过JSON自带的stringify()方法来判断:
// JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
if (JSON.stringify(data) === '{}') {
  return false // 如果为空,返回false
}
return true // 如果不为空,则会执行到这一步,返回true


// ES6新增的方法Object.keys():
// Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组。
if (Object.keys(object).length === 0) {
  return false // 如果为空,返回false
}
return true // 如果不为空,则会执行到这一步,返回true