js 判断是不是空、值是否存在

删除回忆录丶 提交于 2019-12-06 00:22:33

判断数组是否存在某个值:

Array.indexOf(val) > -1 //存在 (缺陷:一是不够语义化,它的含义是找到参数值的第一个出现位置,所以要去比较是否不等于-1,表达起来不够直观。二是,它内部使用严格相等运算符(===)进行判断,这会导致对NaN的误判。)
Array.includes(val)

判断对象是否存在某个字段:

obj["key"] != undefined//(缺陷: 如果这个key定义了,并且就是很2的赋值为undefined)
!("key" in obj)
obj.hasOwnProperty("key")
typeof item.editFlag === "undefined"

判断是否为空

JavaScript本身没有判断一个变量是不是空值的函数,因为变量有可能是string,object,number,boolean等类型,类型不同,判断方法也不同。所以在文章中写了一个函数,用以判断JS变量是否空值,如果是undefined, null, '', NaN,false,0,[],{} ,空白字符串,都返回true,否则返回false

function isEmpty(v) {
    switch (typeof v) {
    case 'undefined':
        return true;
    case 'string':
        if (v.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true;
        break;
    case 'boolean':
        if (!v) return true;
        break;
    case 'number':
        if (0 === v || isNaN(v)) return true;
        break;
    case 'object':
        if (null === v || v.length === 0) return true;
        for (var i in v) {
            return false;
        }
        return true;
    }
    return false;
}

测试

isEmpty()              //true
isEmpty([])            //true
isEmpty({})            //true
isEmpty(0)             //true
isEmpty(Number("abc")) //true
isEmpty("")            //true
isEmpty("   ")         //true
isEmpty(false)         //true
isEmpty(null)          //true
isEmpty(undefined)     //true
typeof
typeof undefined === 'undefined'
typeof null === 'object'

//Boolean
typeof true === 'boolean'

//Number
typeof 1 === 'number'

//String
typeof '111' === 'string'

//Array
typeof ['a','b'] === 'object'

//Object
typeof {a:1,b:2} === 'object'

判断数组方法:

instanceof Array
objName.constructor==Array //(缺陷:在不同iframe中创建Array并不共享prototype;继承Array也为true,如:b.prototype=new Array)
length,splice //length不可枚举(缺陷:object.propertyIsEnumerable('length'))
Array.isArray(objName)
obj.prototype.toString.call(objName)==='[object Array]'
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!