[原创]弄不明白javascript中的undefined和null?我们来看看!

写在前面

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

  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和null?我们来看看!)