JavaScript中的undefined与null

  • Post author:
  • Post category:java




一、转载声明:


文章观点源于博客


“阮一峰的网络日志”





“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

下图为描述内容:

ECMA中的描述




三、undefined由来及合理性:


  1. JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值,且null可以自动转为0;
//示例
Number(null);  // 0 此为数字0,数据类型"number"
  1. null被视作一个空对象,但JavaScript的设计者Brendan Eich觉得表示”无”的值最好不是对象;
  2. JavaScript 是一门动态类型语言,成员除了表示存在的空值外,还有可能根本就不存在(因为存不存在只在运行期才知道),所以这就要一个值(即undefined)来表示对某成员的getter 是取不到值的



四、undefined和null的对比:



  1. null

    表示一个



    被定义了,定义为“空值”;
典型用法:
    (1) 作为函数的参数,表示该函数的参数不是对象。
    (2) 作为对象原型链的终点。 
//示例
Object.getPrototypeOf(Object.prototype)//null

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