美文网首页
[原创]弄不明白javascript中的undefined和nu

[原创]弄不明白javascript中的undefined和nu

作者: truman12 | 来源:发表于2020-07-09 12:07 被阅读0次

    写在前面

    先给出结论了。赶时间的朋友,可以只看这里。

    1. 声明了变量但不赋值,或赋值为undefined,两者是一样的。(见a和b)
    2. 赋值为null时,表示该变量是一个对象。(见c)
    3. 当val为undefined、null、空对象、空字符串或者为0时, !val(取非)为true。正数与负则为false。注意空字符串取非也是true,但是,含空格的字符串则不是
    4. 若val为undefined或者null,直接比较变量值时(比如val==undefined, val==null),二者效果相同,都是true。因此不能这样直接通过比较判断。(见a,b,c)
    5. 那要怎么判断undefined和null?
      • 判断undefined,必须使用 typeof (a) == "undefined"(undefined必须要加引号,作为字符串)。
      • 判断null,注意不能使用 val==null的方式判断。可以这样:!val && typeof(val)!="undefined" && val!=0)

    例子

    可以看看下面的详细例子:

    function test() {
        var a;
        console.log(typeof (a));                // undefined
        console.log(!a);                        // true
        console.log(a == undefined);            // true 见下一行
        console.log(a == null);                 // true 直接比较变量值时,undefined与null效果相同
        console.log(typeof (a) == "undefined"); // true
        console.log(typeof (a) == "null");      // false
        console.log(typeof (a) == undefined);   // false
        console.log(typeof (a) == null);        // false
    
        var b = undefined;
        console.log(typeof (b));                // undefined
        console.log(!b);                        // true
        console.log(b == undefined);            // true 见下一行
        console.log(b == null);                 // true 直接比较变量值时,undefined与null效果相同
        console.log(typeof (b) == "undefined"); // true
        console.log(typeof (b) == "null");      // false
        console.log(typeof (b) == undefined);   // false
        console.log(typeof (b) == null);        // false
    
        var c = null;
        console.log(typeof (c));                // object
        console.log(!c);                        // true
        console.log(c == undefined);            // true
        console.log(c == null);                 // true
        console.log(typeof (c) == "undefined"); // false
        console.log(typeof (c) == "null");      // false
        console.log(typeof (c) == undefined);   // false
        console.log(typeof (c) == null);        // false
    
        var d = "";
        console.log(typeof (d));                // string
        console.log(!d);                        // true //空字符串,取非为true
    
        var d2 = " "; //有空格
        console.log(typeof (d2));                // string
        console.log(!d2);                        // false  //含空格的字符串,取非为false
    
        var e = 0;
        console.log(typeof (e));                // number
        console.log(!e);                        // true 只有为零时取非为true
    
        var f = 1;
        console.log(typeof (f));                // number
        console.log(!f);                        // false 正数取非为false
    
        var g = 2;
        console.log(typeof (g));                // number
        console.log(!g);                        // false 正数取非为false
    
        var h = -1;
        console.log(typeof (h));                // number
        console.log(!h);                        // false , 负数取非也为true
    }
    
    

    彩蛋

    由此,我们可以提炼出这样的判断方法作为工具类:

    /**
     * 判断是undefined
     */
    function isUndefined(val) {
        return typeof (val) == "undefined";
    }
    
    /**
     * 判断为null
     */
    function isNull(val) {
        return !val && typeof (val) != "undefined" && val != 0;
    }
    
    /**
     * 判断是undefined或者为null
     */
    function isUndefinedOrNull(val) {
        return val == undefined;
    }
    
    /**
     * 判断是否为真值(非undefined,非null,非空对象,非零)
     */
    function isTrue(val) {
        return !val;
    }
    

    相关文章

      网友评论

          本文标题:[原创]弄不明白javascript中的undefined和nu

          本文链接:https://www.haomeiwen.com/subject/qtvjcktx.html