对象判空,长度

toString是不能转对象的,结果只能得到[object Object],对象转换为字符串有专门的方法JSON.Stringfy();Array用toString转的话,相当于join(',');

前提

let obj = {};

0、如何判定一个数据是对象?

先来回忆下数组的判定,1、instanceof,2、isArray,3、constructor&indexOf,4、prototype&indexOf,那么对象的判定是否有异曲同工之妙?

0-1、instanceof
obj instanceof Object
0-2、constructor&indexof 同数组
obj.constructor.toString().indexOf('Object');
0-3、prototype,同数组
Object.prototype.toString.call(obj) === "[object Object]"

1、ES6,Object.keys()

Object.keys(obj).length === 0; // 获取对象的属性,是一个数组

2、JSON字符串

if (JSON.Stringfy(obj) === '{}') {
  // 是对象
}

3、循环

function isEmpty(object) {
    for (let key in object) {
        return false;
     };
    return true;
}

4、Object.getOwnPropertyNames()

同ES6的Object.keys()

扩展

给所有对象加方法getLen,调用之后获取自身长度

 Object.prototype.getLen = function () {
      return Object.keys(this).length;
 }
let objLen = obj.getLen();

你可能感兴趣的:(对象判空,长度)