检查的东西是空的Javascript?
我怎样才能检查一个variables是否为空的Javascript? 对不起,愚蠢的问题,但我是一个JavaScript的新手!
if(response.photo) is empty { do something else { do something else }
response.photo
来自JSON,有时候可能是空的,空的数据单元格! 我想检查它是否是空的。
如果你正在testing一个空string:
if(myVar === ''){ // do stuff };
如果您正在检查已声明但未定义的variables:
if(myVar === null){ // do stuff };
如果您正在检查可能未定义的variables:
if(myVar === undefined){ // do stuff };
如果你同时检查两个variables是空的或未定义的:
if(myVar == null){ // do stuff };
这是一个比你想象的更大的问题。 variables可以通过很多方式清空。 有点取决于你需要知道的。
// quick and dirty will be true for '', null, undefined, 0, NaN and false. if (!x) // test for null OR undefined if (x == null) // test for undefined OR null if (x == undefined) // test for undefined if (x === undefined) // or safer test for undefined since the variable undefined can be set causing tests against it to fail. if (typeof x == 'undefined') // test for empty string if (x === '') // if you know its an array if (x.length == 0) // or if (!x.length) // BONUS test for empty object var empty = true, fld; for (fld in x) { empty = false; break; }
这应该涵盖所有情况:
function empty( val ) { // test results //--------------- // [] true, empty array // {} true, empty object // null true // undefined true // "" true, empty string // '' true, empty string // 0 false, number // true false, boolean // false false, boolean // Date false // function false if (val === undefined) return true; if (typeof (val) == 'function' || typeof (val) == 'number' || typeof (val) == 'boolean' || Object.prototype.toString.call(val) === '[object Date]') return false; if (val == null || val.length === 0) // null or 0 length array return true; if (typeof (val) == "object") { // empty object var r = true; for (var f in val) r = false; return r; } return false; }
请参阅http://underscorejs.org/#isEmpty
isEmpty_.isEmpty(object)如果可枚举对象不包含任何值(不可枚举自己的属性),则返回true。 对于string和类似数组的对象_.isEmpty检查length属性是否为0。
我在上面发现的许多解决scheme中看到了潜在的缺点,所以我决定编译我自己的。
注意:它使用Array.prototype.some ,检查你的浏览器支持。
下面的解决scheme考虑variables为空如果以下之一是正确的:
- JS认为variables等于
false
,已经涵盖了很多东西,比如0
,""
,[]
,甚至[""]
和[0]
- 值为
null
或者它的types是'undefined'
- 这是一个空的对象
-
它是一个只包含空值的对象/数组(即分解为原始数据的每个部分都等于
false
)。 检查钻取recursion到对象/数组结构。 例如isEmpty({"": 0}) // true isEmpty({"": 1}) // false isEmpty([{}, {}]) // true isEmpty(["", 0, {0: false}]) //true
function代码:
/** * Checks if value is empty. Deep-checks arrays and objects * Note: isEmpty([]) == true, isEmpty({}) == true, isEmpty([{0:false},"",0]) == true, isEmpty({0:1}) == false * @param value * @returns {boolean} */ function isEmpty(value){ var isEmptyObject = function(a) { if (typeof a.length === 'undefined') { // it's an Object, not an Array var hasNonempty = Object.keys(a).some(function nonEmpty(element){ return !isEmpty(a[element]); }); return hasNonempty ? false : isEmptyObject(Object.keys(a)); } return !a.some(function nonEmpty(element) { // check if array is really not empty as JS thinks return !isEmpty(element); // at least one element should be non-empty }); }; return ( value == false || typeof value === 'undefined' || value == null || (typeof value === 'object' && isEmptyObject(value)) ); }
这取决于你的意思是“空”。 最常见的模式是检查variables是否未定义 。 许多人也做一个空的检查,例如:
if (myVariable === undefined || myVariable === null)...
或者以更短的forms:
if (myVariable || myVariable === null)...
if (myVar == undefined)
将工作,看看是否宣布变种,但没有initalized。
检查未定义:
if (typeof response.photo == "undefined") { // do something }
这将做vb的IsEmpty
equivelant。 如果myvar包含任何值,即使为null,空string或0,也不是“空”。
要检查variables或属性是否存在,例如已经声明了,尽pipe它可能没有被定义,你可以使用in
运算符。
if ("photo" in response) { // do something }
如果你正在寻找相当于PHP的empty
function,请检查:
function empty(mixed_var) { // example 1: empty(null); // returns 1: true // example 2: empty(undefined); // returns 2: true // example 3: empty([]); // returns 3: true // example 4: empty({}); // returns 4: true // example 5: empty({'aFunc' : function () { alert('humpty'); } }); // returns 5: false var undef, key, i, len; var emptyValues = [undef, null, false, 0, '', '0']; for (i = 0, len = emptyValues.length; i < len; i++) { if (mixed_var === emptyValues[i]) { return true; } } if (typeof mixed_var === 'object') { for (key in mixed_var) { // TODO: should we check for own properties only? //if (mixed_var.hasOwnProperty(key)) { return false; //} } return true; } return false; }
如果是空数组,那么我缺less的是什么… keyless object … falseness const isEmpty = o => Array.isArray(o)&&!o.join('')。 typeof o ==='object'&&!Object.keys(o).length || !(+值);
只要把variables放在if条件中,如果variables有任何值,就会返回true,否则返回false。
if (response.photo){ // if you are checking for string use this if(response.photo == "") condition alert("Has Value"); } else { alert("No Value"); };