The difference between undefined and null in javaScript and the historical context of undefined

The difference between undefined and null (the ins and outs are very detailed) 

Directly upload code and screenshots

Those who can read it carefully are excellent people, and encourage each other!

<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>

The results of the operation are as follows:

Guess you like

Origin blog.csdn.net/czh500/article/details/114493179