有没有一个标准的函数来检查JavaScript中的空,未定义或空白variables?

是否有一个通用的JavaScript函数检查variables是否有值,并确保它不是undefined或为null ? 我有这个代码,但我不确定它是否涵盖所有情况:

 function isEmpty(val){ return (val === undefined || val == null || val.length <= 0) ? true : false; } 

你可以检查variables是否具有truthy值。 这意味着

 if( value ) { } 

如果value 不是 :则评估为true

  • 空值
  • 未定义
  • 为NaN
  • 空string(“”)
  • 0

上面的列表代表ECMA- / Javascript中的所有可能的falsy值。 在ToBoolean部分的规范中find它。

而且,如果你不知道variables是否存在(也就是说,如果它被声明了 ),你应该检查typeof操作符。 例如

 if( typeof foo !== 'undefined' ) { // foo could get resolved and it's defined } 

如果可以确定至less声明了一个variables,则应该直接检查它是否具有truthy所示的truthy值。

进一步阅读: http : //typeofnan.blogspot.com/2011/01/typeof-is-fast.html

 // value is undefined or null return value === undefined || value === null; 

JavaScript忍者可以使用==运算符:

 return value == null; 
 function isEmpty(value){ return (value == null || value.length === 0); } 

这将返回true

 undefined // Because undefined == null null [] "" 

和零参数函数,因为函数的length是它所需声明参数的数量。

要禁止后一类,您可能只想检查空白string

 function isEmpty(value){ return (value == null || value === ''); } 

最佳评分的第一个答案是错误的。 如果值未定义,它将在现代浏览器中引发exception。 你必须使用:

 if (typeof(value) !== "undefined" && value) 

要么

 if (typeof value !== "undefined" && value) 

我知道这是一个古老的问题,但这是最安全的检查,我没有看到它在这里发布完全是这样的:

 if (typeof value != 'undefined' && value) { //deal with value' }; 

它将涵盖价值从未定义的情况,也包括以下任何一种情况:

  • 空值
  • 未定义(未定义的值与从未定义的参数不同)
  • 0
  • “”(空string)
  • 为NaN

PS不需要在typeof值中严格相等!='undefined'

您可能会发现以下function有用:

 function typeOf(obj) { return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase(); } 

或者在ES7(如果进一步改进,评论)

 function typeOf(obj) { const { toString } = Object.prototype; const stringified = obj::toString(); const type = stringified.split(' ')[1].slice(0, -1); return type.toLowerCase(); } 

结果:

 typeOf(); //undefined typeOf(null); //null typeOf(NaN); //number typeOf(5); //number typeOf({}); //object typeOf([]); //array typeOf(''); //string typeOf(function () {}); //function typeOf(/a/) //regexp typeOf(new Date()) //date 

检查空string(“”),null,undefined,false和数字0和NaN。 假如一个string是空的var name = ""console.log(!name)返回true

 function isEmpty(val){ return !val; } 

如果val空,null,undefined,false,数字0或NaN,则此函数将返回true。

你有点过分。 要检查variables是否没有赋值,只需要检查undefined和null。

 function isEmpty(value){ return (typeof value === "undefined" || value === null); } 

这是假设0"" ,对象(甚至空对象和数组)是有效的“值”。

这里是我的 – 如果值为null,undefined等或空白(即只包含空格),则返回true:

 function stringIsEmpty(value) { return value ? value.trim().length == 0 : true; } 

如果你喜欢普通的JavaScript试试这个:

  /** * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a * length of `0` and objects with no own enumerable properties are considered * "empty". * * @static * @memberOf _ * @category Objects * @param {Array|Object|string} value The value to inspect. * @returns {boolean} Returns `true` if the `value` is empty, else `false`. * @example * * _.isEmpty([1, 2, 3]); * // => false * * _.isEmpty([]); * // => true * * _.isEmpty({}); * // => true * * _.isEmpty(''); * // => true */ function isEmpty(value) { if (!value) { return true; } if (isArray(value) || isString(value)) { return !value.length; } for (var key in value) { if (hasOwnProperty.call(value, key)) { return false; } } return true; } 

否则,如果您已经在使用下划线或lodash,请尝试:

 _.isEmpty(value) 

如果variables没有被声明,你将无法使用函数testing未定义,因为你会得到一个错误。

 if (foo) {} function (bar) {}(foo) 

如果foo没有被声明,两者都会产生一个错误。

如果你想testing一个variables是否已被声明,你可以使用

 typeof foo != "undefined" 

如果你想testingfoo是否已经声明,那么你可以使用它

 if (typeof foo != "undefined" && foo) { //code here } 

您可以使用:

If子句validationstring或值是否为空。 喜欢这个:

 if (someVar.value) { //its not emppty } else { //Its empty } 

这是一个非常简单的。

 if(data) { //Comes inside only if the data is not empty and not null } 

检查默认值

 function typeOfVar (obj) { return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase(); } function isVariableHaveDefaltVal(variable) { if ( typeof(variable) === 'string' ) { // number, boolean, string, object console.log(' Any data Between single/double Quotes is treated as String '); return (variable.trim().length === 0) ? true : false; }else if ( typeof(variable) === 'boolean' ) { console.log('boolean value with default value \'false\''); return (variable === false) ? true : false; }else if ( typeof(variable) === 'undefined' ) { console.log('EX: var a; variable is created, but has the default value of undefined.'); return true; }else if ( typeof(variable) === 'number' ) { console.log('number : '+variable); return (variable === 0 ) ? true : false; }else if ( typeof(variable) === 'object' ) { // -----Object----- if (typeOfVar(variable) === 'array' && variable.length === 0) { console.log('\t Object Array with length = ' + [].length); // Object.keys(variable) return true; }else if (typeOfVar(variable) === 'string' && variable.length === 0 ) { console.log('\t Object String with length = ' + variable.length); return true; }else if (typeOfVar(variable) === 'boolean' ) { console.log('\t Object Boolean = ' + variable); return (variable === false) ? true : false; }else if (typeOfVar(variable) === 'number' ) { console.log('\t Object Number = ' + variable); return (variable === 0 ) ? true : false; }else if (typeOfVar(variable) === 'regexp' && variable.source.trim().length === 0 ) { console.log('\t Object Regular Expression : '); return true; }else if (variable === null) { console.log('\t Object null value'); return true; } } return false; } var str = "A Basket For Every Occasion"; str = str.replace(/\s/g, "-"); //The "g" flag in the regex will cause all spaces to get replaced. 

检查结果:

 isVariableHaveDefaltVal(' '); // string isVariableHaveDefaltVal(false); // boolean var a; isVariableHaveDefaltVal(a); isVariableHaveDefaltVal(0); // number isVariableHaveDefaltVal(parseInt('')); // NAN isNAN(' '); - true isVariableHaveDefaltVal(null); isVariableHaveDefaltVal([]); isVariableHaveDefaltVal(/ /); isVariableHaveDefaltVal(new Object('')); isVariableHaveDefaltVal(new Object(false)); isVariableHaveDefaltVal(new Object(0)); typeOfVar( function() {} ); 

我用@Vix函数()来检查哪个types的对象。

使用instanof«

 var prototypes_or_Literals = function (obj) { switch (typeof(obj)) { // object prototypes case 'object': if (obj instanceof Array) return '[object Array]'; else if (obj instanceof Date) return '[object Date]'; else if (obj instanceof RegExp) return '[object regexp]'; else if (obj instanceof String) return '[object String]'; else if (obj instanceof Number) return '[object Number]'; else return 'object'; // object literals default: return typeof(obj); } }; output test « prototypes_or_Literals( '' ) // "string" prototypes_or_Literals( new String('') ) // "[object String]" Object.prototype.toString.call("foo bar") //"[object String]" 

这将检查不确定的嵌套variables是否是未定义的

 function Undef(str) { var ary = str.split('.'); var w = window; for (i in ary) { try { if (typeof(w = w[ary[i]]) === "undefined") return true; } catch(e) { return true; } } return false; } if (!Undef("google.translate.TranslateElement")) { 

以上检查是否存在Google翻译functionTranslateElement。 这相当于:

 if (!(typeof google === "undefined" || typeof google.translate === "undefined" || typeof google.translate.TranslateElement === "undefined")) { 

这个条件检查

 if (!!foo) { //foo is defined } 

是你所需要的。

 var myNewValue = myObject && myObject.child && myObject.child.myValue; 

这永远不会抛出一个错误。 如果myObjectchildmyValue为null,则myNewValue将为null。 没有错误将被抛出

我想用这个? 操作员稍微清洁。

 var ? function_if_exists() : function_if_doesnt_exist(); 

虽然oldie,忘记是他们应该包装他们的代码块,然后捕获错误,然后testing…

 function checkup( t ){ try{ for(p in t){ if( p.hasOwnProperty( t ) ){ return true; } } return false; }catch(e){ console.log("ERROR : "+e); return e; } } 

所以,你真的不需要事先检查一个潜在的问题,你只要抓住它,然后处理它,你想要的。

 function isEmpty(val){ return !val; } 

但是这个解决scheme是过度devise的,如果你以后不需要修改这个function,那么在代码中直接使用它就更简单了:

 if(!val)... 

对于我的情况,我尝试了如果null,'',!variables,但它没有工作。

看到我的代码下面从HTML领域的文字

 var status=$(this).text(); //for example (for my case) 

如果状态variables中没有值(无文本),我试图将值novalue设置为状态variables。

下面的代码工作。

 if(status == false) { status='novalue'; } 

当没有findsatusvariables的文本时,上面的代码赋给状态variables“novalue”