Array.indexOf(val) > -1
//存在 (缺陷:一是不夠語義化,它的含義是找到參數值的第一個出現位置,因此要去比較是否不等於-1,表達起來不夠直觀。二是,它內部使用嚴格相等運算符(===)進行判斷,這會致使對NaN的誤判。)Array.includes(val)
obj["key"] != 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 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]'