isEmpty

5.23 isEmpty

5.23.1 语法

_.isEmpty(object)

5.23.2 说明

如果object 不包含任何值(没有可枚举的属性),返回true。 对于字符串和类数组(array-like)对象,如果length属性为0,那么_.isEmpty检查返回true。

5.23.3 代码示例

示例一:empty的情况

_.isEmpty(); //=> true

//五种基本类型
_.isEmpty(undefined); //=> true
_.isEmpty(null); //=> true
_.isEmpty(0); //=> true
_.isEmpty(''); //=> true
_.isEmpty(false); //=> true

//复杂对象
_.isEmpty([]); //=> true
_.isEmpty({}); //=> true

示例二:arguments的length为0为empty(坑)

var args = function() {
    return arguments;
};
_.isEmpty(args); //=> true

//带一个参数
_.isEmpty(args('')); //=> 这里是?

示例三: isEmpty正则返回true

正则对象上的原链属性为空所以为empty,返回true

_.isEmpty(new RegExp('')); //=> true
_.isEmpty(new RegExp('/abc/')); //=> true

5.23.4 源码

_.isEmpty = function(o) {
    //判定0,"",null,undefined,false为empty
    if (o == null) return true;

    //数组,字符串和arguments根据length判断。
    if (isArrayLike(o) && (_.isArray(o) || _.isString(o) || _.isArguments(o))) {
        return o.length === 0;
    }

    //对象根据原型上的数量判断
    return _.keys(o).length === 0;
};

5.23.5 原始值的对象表示方式依然可以用_.isEmpty

new String('') == null; //=> false
_.isEmpty(new String('')); //=> true