有没有一个标准的函数来检查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;
这永远不会抛出一个错误。 如果myObject , child或myValue为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”