JavaScript:undefined And null区别

下班吃饭的时候,同事偶然问了一个问题:undefined和null到底有什么区别?无法回答,回去查阅相关资料,算了有了一个了解,做相关的总结,在开始之前,请看如下代码,算是抛出这个问题:

console.info(undefined == null);    //true
console.info(undefined === null);   //false

上述结果可以给我们一个这样的理解: undefined和null两个值相等,但是他们含义不同。具体两者有什么区别,先理解下undefined和null在做分析。

undefined

undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化,这个变量的值就是undefined。例如:

//1、声明变量,未指定值
var var1;
console.info(typeof varl);      //undefined
//2、指定值为undefined
var var2 = undefined;
console.info(typeof var2);      //undefined

上面两种写法是等价的,未经初始化的值默认就会取得undefined值。

Tips:一般而言不需要显示的把一个变量设置为undefined,undefined的主要目的在于比较,ECMA第三版引入这个值正是为了区分空对象指针null和未经初始化的变量

既然谈到了null,这里在多补充一点,对为初始化的变量执行typeof返回undefined值,对为声明的变量执行typeof也会返回undefined值,如下例子:

var var3;
console.info(typeof var3);      //undefined
console.info(typeof var4);      //undefined

这个结果有逻辑上的合理性,虽然null和undefined在技术角度上有本质区别,但是实际中不可能对两种变量进行操作。在这种情况下如果我们习惯声明变量就进行初始化的时候,当typeof操作符返回“undefined”值时,我们就知道有变量尚未被声明,而不是尚未初始化。

null

null类型也是只有一个值null,从逻辑角度来看,null值表示一个空对象指针,不信?看如下代码就知道了:

var var5 = null;
console.info(typeof var5);      //object

所以在变量是用于保存对象时,最后将之初始化为null,可以很方便的知道变量是否保存了一个对象的引用。

区别

分别的了解了这两种类型,到这里似乎有所理解,但又不具体。回到最初抛出的问题,在ECMAScript的原始类型中,是有undefined和null类型的,这两种类型分别对应了属于自己的唯一值undefined和null。undefined实际上是从null派生而来,这就可以解释undefined==null为true了。

就undefined===null为false分两个方面来理解:

内存

很显然,他们的地址分配不一样,我想着对于有后端基础的同学来说很容易理解,具体如下图:

用途

尽管undefined==null为true,但是他们的用途是不一样的。就像前面所述,无论什么情况都没有必要将一个变量值显示的指定为undefined,默认值为undefined,但是默认的规则对null却不适用。因为null表示没有指向对象的引用。

总的来说,undefined派生于null,他们是“=="的,另一层面上undefined表示没有赋值的基本数据类型,null表示没有赋值的引用数据类型,他们不能“===”。

时间: 2024-10-11 10:19:40

JavaScript:undefined And null区别的相关文章

JavaScript - undefined与null的区分及最佳实践

主要参考 <JavaScript高级程序设计> ECMAScript中的六种数据类型 ECMAScript中包含六种数据类型: Undefined Null Boolean Number String Object 其中,Undefined类型和Null类型是唯二的仅有一个值的数据类型 运算符typeof 通过typeof运算符可能返回如下六种可能的字符串: "undefined" "boolean" "string" "n

来理解undefined 和 null 区别

之前虽然也知道这两个之间的区别,但是让我描述的话,感觉上还是说的不是很清楚.今天也详细看了一次这个知识点,现在来说说这两者间的区别. null: Null类型,代表"空值",代表一个空对象指针,使用typeof运算得到 "object",所以你可以认为它是一个特殊的对象值. undefined: Undefined类型,当一个声明了一个变量未初始化时,得到的就是undefined. null是javascript的关键字,可以认为是对象类型,它是一个空对象指针,和其

JavaScript:undefined And null差异

班吃饭的时候,同事偶然问了一个问题:undefined和null究竟有什么差别?无法回答,回去查阅相关文档,算了有了一个了解,做相关的总结.在開始之前,请看例如以下代码,算是抛出这个问题: console.info(undefined == null); //true console.info(undefined === null); //false 上述结果能够给我们一个这种理解: undefined和null两个值相等,可是他们含义不同.详细两者有什么差别,先理解下undefined和nul

undefined和null区别

undefined类型只有一个值就是undefined,没有必要显式地声明一个变量为undefined. null类型其实就是一个对象的空指针,所以用typeof null 才会显示为object. 此外还值得一提的是,null == undefined 为true,null === undefined 为false的原因 因为相等运算符比较是先转换再比较,全等是仅比较不转换. 原文地址:https://www.cnblogs.com/caoshufang/p/11474010.html

javascript 中 undefined 和 null 区别

1.相同点 如果我们直接用 undefined == null  比较他们是相等的返回的将是 true. 2.区别 当我们用undefined === null 比较的时候最后返回的将是 false. A.undefined表示"缺少值",就是此处应该有一个值,但是还没有定义 (1)变量被声明了,但没有赋值时,就等于undefined. (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined. (3)对象没有赋值的属性,该属性的值为undefined. (4)函数没有

JS中undefined、null以及NaN之间的区别,以及对象属性赋值的面试题

(1)以下三种情况typeof 返回类型为undefined --当变量未初始化时 --变量未定义时 --函数无明确返回值时(函数没有返回值时返回的都是undefined) (2)Null 类型 undefined 是由null派生处理的,因此undefined == null undefined 是声明了但是没有初始化的该变量, null表示尚未存在的对象 . (3)NaN 值 是一个特殊值,表示非数(Not a Number),类型转换失败就会返回NaN --NaN 不等于自己,即 NaN

Javascript中的null和 undefined

Javascript Undefined vs NULL Many a times we often get confused on whats the difference between UNDEFINED and NULL. undefined means a variable has been declared but has not yet been assigned a value. On the other hand, null is an assignment value. It

javascript中undefined和null的区别详解

一.问题的由来 永远不要直接使用undefined进行变量判断使用字符串"undefined"对变量进行判断 这里,undefined是原始值,在JS中undefined出现只有两种情况,一种是变量未定义.一种是定义了变量,但是没有赋值. 如果这个地方person未定义,那么利用person===undefined全等判断就会报错,person未定义但是如果使用typeof来判断,那么就不会报错了. ep: alert(person == undefined);//报错 person

JavaScript中undefined与null的区别

通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会发生什么事: >>> fooReferenceError: foo is not defined 我们得到了一个错误信息.我们在该变量上用typeof操作符看看它是什么类型: >>> typeof foo"undefined" 我们得到的结果为字符串“u