版权声明:本文为博主原创文章,未经博主允许不得转载。 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!");
}