javaScript中undefined与null的区别以及undefined的历史来龙去脉

undefined与null的区别(来龙去脉很详细) 

直接上代码和截图

能认真看完的都是优秀的人,共勉!

<script type="text/javascript">
//undefined与null的区别以及undefined的历史来龙去脉
//在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别。
//如下这两种写法几乎等价
var a = undefined;
var b = null;
console.log(a, b); //undefined null

//undefined和null在if语句中,都会被自动转为false
if(!undefined) {
	console.log("undefined is false");
}

if(!null) {
	console.log("null is false");
}

//奇怪了,如下的undefined和null却没有自动转为false
console.log(false == false, true == true);//true true
console.log(false === false, true === true);//true true
console.log("*********************************");
console.log(undefined, undefined == false);//undefined false
console.log(undefined, false == undefined);//undefined false
console.log(undefined, undefined == true);//undefined false
console.log(undefined, true == undefined);//undefined false
console.log(null, null == false);//null false
console.log(null, false == null);//null false
console.log(null, null == true);//null false
console.log(null, true == null);//null false

//undefined == null返回true
console.log("***" + (undefined == null));//***true
//undefined === null返回false,由此可知,undefined和null这两者的数据类型不同(即这两者不是同一种数据类型)
console.log("###" + (undefined === null));//###false

console.log(undefined == 0, undefined === 0);//false false
console.log(undefined == 1, undefined === 1);//false false

console.log(null == 0, null === 0);//false false
console.log(null == 1, null === 1);//false false

console.log(false == 1, false === 1);//false false
console.log(false == 0, false === 0);//true false

console.log(true == 1, true === 1);//true false
console.log(true == 0, true === 0);//false false
console.log(true == 666, true === 666);//false false

//非零即真(非零即true),0即false
if(666) {
	console.log("**真**");//**真**
}
if(-888) {
	console.log("##真##");//##真##
}
if(1) {
	console.log("¥¥真¥¥");//¥¥真¥¥
}
//0即false
if(0) {
	console.log("$$真$$"); //这句不会打印出来
}

//null可以自动转为0
console.log(Number(null));//0
console.log(null + 235, 66 + null, 3 + null + 5);//235 66 8

/*
JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0,
undefined是一个表示"无"的原始值,转为数值时为NaN。
*/
console.log(Number(undefined));//NaN
console.log(8 + undefined);//NaN

//目前,null和undefined基本是同义的,只有一些细微的差别。
/*
null表示"没有对象",即该处不应该有值。典型用法是:
(1)作为函数的参数,表示该函数的参数不是对象。
(2)作为对象原型链的终点。
*/
function fun1(p){
	console.log(p);
}
fun1(null);//打印出null

function fun2(){
	console.log("传递了" + arguments.length + "个参数进来,参数值如下:");
	for (var index = 0; index < arguments.length; index++) {
		console.log(arguments[index]);
	}
}
fun2();
console.log("**********");
fun2(null);
console.log("**********");
fun2("令狐冲", 66, 88.88, null);

/*
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
*/

//变量被声明了,但没有赋值时,就等于undefined。
var i;
console.log(i); //undefined

//调用函数时,应该提供的参数没有提供,该参数等于undefined。
function fun3(p) {
	console.log(p);
}
fun3(); //undefined

//对象没有赋值的属性,该属性的值为undefined。
var obj = new Object();
console.log(obj.aaa);//undefined

//函数没有返回值时,默认返回undefined。
function fun4() {
	console.log("我是fun4函数");
}
var f = fun4();
console.log(f); //undefined


var str1 = "江西省赣州市于都县";
console.log(str1.length); //9
str1 = null;
// console.log(str1.length); //Uncaught TypeError: str1 is null
str1 = undefined;
// console.log(str1.length); //Uncaught TypeError: str1 is undefined

var roleNames = new Array("令狐冲", "韦小宝", "张无忌", "杨过", "段誉");
console.log(roleNames.length); //5
roleNames = null;
// console.log(roleNames.length); //Uncaught TypeError: roleNames is null
roleNames = undefined;
console.log(roleNames.length); //Uncaught TypeError: roleNames is undefined

</script>

运行结果如下:

猜你喜欢

转载自blog.csdn.net/czh500/article/details/114493179