您的位置:首页 > 其它

ECMAScript中原始类型Null和Undefined小结

2012-07-16 15:41 429 查看
文章最新版地址:http://leeyee.github.io/blog/2013/05/07/javascript-null-undefined

var param;var param = undefined;var param = null;未定义
param == 'undefined'falsefalse false报错。param未定义
param === 'undefined'false false false 报错。param未定义
param == undefinedtruetruetrue报错。param未定义
param === undefinedtrue true false报错。param未定义
typeof paramundefined undefined objectundefined
typeof param == 'undefined'true true false true
typeof param === 'undefined'true truefalse true
typeof param == undefinedfalse false false false
typeof param === undefinedfalsefalse false false
if(param)false false false 报错。param未定义
if(typeof param)truetruetrue true
结论:

null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。
声明但不赋值,默认为undefined;即 var param ; 等价于 var param = undefined;
undefined不同于未定义,但typeof并不区分undefined和未定义;因此typeof(undefined)与typeof(未定义变量)的输出值都是undefined;
当函数无明确返回值时,默认返回的为undefined;如:( function foo(){ })
typeof(null)返回的是对象,但null == undefined返回true;这是由于值undefined其实是从值null派生过来的,因此ECMAScript将其定义为一样的;
null 虽然 == undefined,但undefined是声明了变量但未对其初始化时赋值时赋予该变量的值,null则表示尚未存在的对象;
只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null;
函数或方法返回值为对象时,如果该返回的对象找不到则该函数或方法通常返回的是null;
typeof方法返回的是变量的引用类型的字符名称。因此if(typeof param)为永真。如果要判断引用类型,可以使用instanceof,但此时变量的声明应使用new关键字创建。

测试代码:

function test1() {
var param;// 定义但未赋值
console.log("1. var param; --> ", "定义但未赋值");
console.log(" 1.1. param == 'undefined' <--> ", param == 'undefined'); // false
console.log(" 1.2. param == undefined <--> ", param == undefined);// true

console.log("      1.1.1 param === 'undefined' <--> ", param === 'undefined'); // false
console.log("      1.2.1 param === undefined <--> ", param === undefined);// true

console.log(" 1.3. typeof param <--> ", typeof param); // undefined
console.log(" 1.4. typeof param == 'undefined' <--> ",
typeof param == 'undefined'); //true
console.log(" 1.5. typeof param == undefined <--> ",
typeof param == undefined);//false
console.log("      1.4.1 typeof param === 'undefined' <--> ",
typeof param === 'undefined'); //true
console.log("      1.5.1 typeof param === undefined <--> ",
typeof param === undefined);//false
param ? console.log(" 1.6. if(param) return true") : console
.log(" 1.6. if(param) return false");

typeof param ? console.log(" 1.7. if(typeof param) return true")
: console.log(" 1.7. if(typeof param) return false");

}
function test2() {
console.log("2. param未定义");
console.log(" 2.1. param == 'undefined' <--> ", "报错,param未定义");
console.log(" 2.2. param == undefined <--> ", "报错,param未定义");
console.log(" 2.3. typeof param <--> ", typeof param); // undefined
console.log(" 2.4. typeof param == 'undefined' <--> ",
typeof param == "undefined");//true
console.log(" 2.5. typeof param == undefined <--> ",
typeof param == undefined);//false
console.log("      2.4.1 typeof param === 'undefined' <--> ",
typeof param === 'undefined');//true
console.log("      2.5.1 typeof param === undefined <--> ",
typeof param === undefined);//false

console.log(" 2.6. if(param) 由于param未定义,因此报错");
typeof param ? console.log(" 2.7. if(typeof param) return true")
: console.log(" 2.8. if(typeof param) return false");

}
function test3() {
var param = null;
console.log("3. var param = null;   -->", "定义默认为null");
console.log(" 3.1. param == 'undefined' <--> ", param == 'undefined'); // false
console.log(" 3.2. param == undefined <--> ", param == undefined);// true

console.log("      3.1.1 param === 'undefined' <--> ", param === 'undefined'); // false
console.log("      3.2.1 param === undefined <--> ", param === undefined);// true

console.log(" 3.3. typeof param <--> ", typeof param); // object
console.log(" 3.4. typeof param == 'undefined' <--> ",
typeof param == 'undefined'); //false
console.log(" 3.5. typeof param == undefined <--> ",
typeof param == undefined);//false

console.log("      3.4.1 typeof param === 'undefined' <--> ",
typeof param === 'undefined'); //false
console.log("      3.5.1 typeof param === undefined <--> ",
typeof param === undefined);//false

param ? console.log(" 3.6. if(param) return true") : console
.log(" 3.6. if(param) return false");

typeof param ? console.log(" 3.7. if(typeof param) return true")
: console.log(" 3.7. if(typeof param) return false");

}
function test4() {
var param = undefined;
console.log("4. var param = undefined;   -->", "定义默认为undefined");
console.log(" 4.1. param == 'undefined' <--> ", param == 'undefined'); // false
console.log(" 4.2. param == undefined <--> ", param == undefined);// true
console.log(" 4.3. typeof param <--> ", typeof param); // undefined
console.log(" 4.4. typeof param == 'undefined' <--> ",
typeof param == 'undefined'); //true
console.log(" 4.5. typeof param == undefined <--> ",
typeof param == undefined);//false
param ? console.log(" 4.6. if(param) return true") : console
.log(" 4.6. if(param) return false");

typeof param ? console.log(" 4.7. if(typeof param) return true")
: console.log(" 4.7. if(typeof param) return false");
}
test1();
test2();
test3();
test4();


测试结果:

1. var param; --> 定义但未赋值
1.1. param == 'undefined' <--> false
1.2. param == undefined <--> true
1.1.1 param === 'undefined' <--> false
1.2.1 param === undefined <--> true
1.3. typeof param <--> undefined
1.4. typeof param == 'undefined' <--> true
1.5. typeof param == undefined <--> false
1.4.1 typeof param === 'undefined' <--> true
1.5.1 typeof param === undefined <--> false
1.6. if(param) return false
1.7. if(typeof param) return true
2. param未定义
2.1. param == 'undefined' <--> 报错,param未定义
2.2. param == undefined <--> 报错,param未定义
2.3. typeof param <--> undefined
2.4. typeof param == 'undefined' <--> true
2.5. typeof param == undefined <--> false
2.4.1 typeof param === 'undefined' <--> true
2.5.1 typeof param === undefined <--> false
2.6. if(param) 由于param未定义,因此报错
2.7. if(typeof param) return true
3. var param = null;   -->定义默认为null
3.1. param == 'undefined' <--> false
3.2. param == undefined <--> true
3.1.1 param === 'undefined' <--> false
3.2.1 param === undefined <--> false
3.3. typeof param <--> object
3.4. typeof param == 'undefined' <--> false
3.5. typeof param == undefined <--> false
3.4.1 typeof param === 'undefined' <--> false
3.5.1 typeof param === undefined <--> false
3.6. if(param) return false
3.7. if(typeof param) return true
4. var param = undefined;   -->定义默认为undefined
4.1. param == 'undefined' <--> false
4.2. param == undefined <--> true
4.3. typeof param <--> undefined
4.4. typeof param == 'undefined' <--> true
4.5. typeof param == undefined <--> false
4.6. if(param) return false
4.7. if(typeof param) return true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐