Is there a standard function to check for null, undefined, or blank variables in JavaScript?

前端 未结 30 3579
眼角桃花
眼角桃花 2020-11-21 23:37

Is there a universal JavaScript function that checks that a variable has a value and ensures that it\'s not undefined or null? I\'ve got this code,

30条回答
  •  执念已碎
    2020-11-22 00:10

    To check Default Value

    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.
    

    check Result:

    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() {} );
    

    I used @Vix function() to check the object of which type.

    using instansof «

    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]"        
    

提交回复
热议问题