写在前面
先给出结论了。赶时间的朋友,可以只看这里。
- 声明了变量但不赋值,或赋值为undefined,两者是一样的。(见a和b)
- 赋值为null时,表示该变量是一个对象。(见c)
- 当val为undefined、null、空对象、空字符串或者为0时, !val(取非)为true。正数与负则为false。注意空字符串取非也是true,但是,含空格的字符串则不是。
- 若val为undefined或者null,直接比较变量值时(比如val==undefined, val==null),二者效果相同,都是true。因此不能这样直接通过比较判断。(见a,b,c)
- 那要怎么判断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;
}