浅析javascript中的undefined和null+判断js对象为空

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Richard1997/article/details/87116266

    最近在学习js,一开始遇到的两种属性值undefined和null就搞得人有些头大。经过几次的代码测试(我用的chrome浏览器,浏览器不同测试结果可能会不同),才对这两种东西有点认识。

首先,按字面上来讲,前者为“未定义”,后者为“空”,但它们都表示“空,没有值”。比如js代码:

alert(null == undefined);

 就是返回true,就表示它们的值是一样的(===运算符才比较类型+值,结果为false)。

 如果使用typeof函数来查看null和undefined:

		alert(typeof(null));
		alert(typeof(undefined));

 会发现第一个弹出的是object,第二个是undefined,可以看出null比undefined稍微有那么一点“类型”。这算它们的第一条差别。

第二,一般情况下,你给变量赋值null变量才会是null:

var a = null;

 而在下面的几种情况下(可能不全,但是是比较常见的情况),变量的值会是undefined:

<!DOCTYPE html>
<html lang="cn">
<head>
	<meta charset="UTF-8">
	<title>undefined and null</title>
	<script type="text/javascript">
	// 1.变量只声明没有初始化或赋值
		var a; 
		alert(a);
	// 2.数组越界或者数组中元素未赋值
	   var arr = [1, 2, 3];
	   alert(arr[3]);
	   var arr = new Array(5);
	   alert(arr[0]);
	// 3.返回没有返回语句的函数
	   var f = function() {};
	   var f1 = f();
	   alert(f1);
	// 4.强行获得对象没有的属性
	   function MyClass() {
	   		this.color = 'red';
	   }
	   alert(new MyClass().colour);
	// 5.函数调用时没有提供参数列表中没有的参数,该参数为undefined
	   function myFun(a, b) {
	   	   alert(a);
	   }
	   myFun();
	</script>
</head>
<body>
</body>
</html>

这里引用廖雪峰老师js课程中的话,做个总结:

事实证明,这并没有什么卵用,区分两者
的意义不大。大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。

如果要判断一个变量为空(这里的空的指是上面两种类型的任意一种),直接==null就可以搞定:

 if (a == null) {
       	alert("I'm drunk!");
  }

更多请参考:阮一峰undefined与null的区别廖雪峰JavaScript课程数据类型和变量

猜你喜欢

转载自blog.csdn.net/Richard1997/article/details/87116266