判斷數組是否存在某個值:
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]'