JavaScript中的undefined与null
一、转载声明:
文章观点源于博客
“阮一峰的网络日志”
中
“undefined与null的区别”
一文以及评论。
注:本博客仅用于自身学习的记录
二、关于undefined==null为true:
//参考
“邵天宇Soy的解释”
JavaScript规范中提到:
要比较相等性之前,不能将 null 和 undefined 转换成其他任何值,并且规定null 和 undefined 是相等的
。null 和 undefined都代表着无效的值。
另外,查阅
ECMAScript Language Specification
发现第11.9.3.2和第11.9.3.3中有描述undefined==null为true
下图为描述内容:
三、undefined由来及合理性:
- JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值,且null可以自动转为0;
//示例
Number(null); // 0 此为数字0,数据类型"number"
- null被视作一个空对象,但JavaScript的设计者Brendan Eich觉得表示”无”的值最好不是对象;
-
JavaScript 是一门动态类型语言,成员除了表示存在的空值外,还有可能根本就不存在(因为存不存在只在运行期才知道),所以这就要一个值(即undefined)来表示对某成员的getter 是取不到值的
四、undefined和null的对比:
-
null
表示一个
值
被定义了,定义为“空值”;
典型用法:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
//示例
Object.getPrototypeOf(Object.prototype)//null
-
undefined
表示根本不存在定义
典型用法:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
//示例1
var i ;
console.log(i) //undefined
//示例2
function f(x){console.log(x)}
f() // undefined
//示例3
var obj = new Object();
console.log(obj.p ) // undefined
//示例4
var x = f(); //注意:示例2已定义函数f()
x // undefined
五、补充
1、关于null的一些测试
//示例1 null数据类型
typeof null; //"object"
//示例2 null与正数及负数的大小比较
null > -1; //true
null < 1; //true
//示例3 null与0的大小比较
null > 0; //false
null < 0; //false
null == 0; //false
//示例4 null数据类型转换
Number(null); //0 此为数字0,数据类型"number"
2、关于undefined的一些测试
// 示例1 undefined 数据类型
typeof undefined; // "undefined"
// 示例2 undefined 数据类型转换
Number(undefined); // NaN