句简单来说是:undefined代表了不存在的值,null代表了没有值。也就是,比如对一个值声明后,没有赋值,输出他就是undefined,是不存在的,而当赋值为null,那么输出就是
null。这两者还有一些区别点要注意:
1 | //1 |
这里为什么typeof b输出为Object呢?
null不是一个对象,尽管ypeof age输出的是Object,逻辑上讲,null值表示一个空对象指针,这是一个历史遗留
问题,JS的最初版本中使用的是32位系统,为了性能考虑使用低位存储变量的类型信息,000开头代表是对象,
null表示为全零,所以将它错误的判断为Object。
1 | if(!undefined) console.log("undefined is false");// undefined is false |
1 | //对于nu11 |
null可以被转为数字0. undefined不可以转为数字
1 | Object.getPrototypeof(Object.prototype); |
项目实践中的区别
null表示”没有对象”,即该处不应该有值。典型用法是:
(1)作为函数的参数,表示该函数的参数不是对象。
(2)作为对象原型链的终点。
undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。.
(4)函数没有返回值时,默认返回undefined。