Quantcast
Viewing all articles
Browse latest Browse all 1557

理解JavaScript中null、undefined和NaN

特别声明:此篇文章内容来源于@Kuba Michalski的《Understanding null, undefined and NaN》一文。

当您开始学习JavaScript时,首先需要学习的是数据类型。只要我们讨论NumberStringBooleanObject时,一旦涉及到nullundefined出现时,作为初学者要理解清楚他们就可能会有点混乱。

如果你和我一样是位JavaScript的初学者,建议您花点时间阅读《变量值的数据类型》一文。

null

null值表示一个指向不存在或无效的对象或地址(DMN)引用。即使它指向不存在的东西,也没什么,它是一个全局对象(也是JavaScript的原始值之一)。

Image may be NSFW.
Clik here to view.

否定null值返回true,但将其与false(或true)进行比较则会给出false

Image may be NSFW.
Clik here to view.

在基础数学运算中,null值将被转换为0

Image may be NSFW.
Clik here to view.

undefined

全局属性nundefined表示原始值undefined。它也是JavaScript的原始数据类型(MDN)。undefined是全局作用域的一个变量。undefined的最初值就是原始数据类型undefined。一个没有被赋值的变量的类型是undefined。如果方法或者是语句中操作的变量没有被赋值,则会返回undefined

Image may be NSFW.
Clik here to view.

当你声明一个变量但没有声明它的值时,JavaScript会给它赋值undefined

Image may be NSFW.
Clik here to view.

如果你尝试在任何运算中使用undefined,你会得到NaN的值。与null相似,否定undefined值返回true,但将其与truefalse作比较则为false

Image may be NSFW.
Clik here to view.

null vs undefined

那么nullundefined两者之间有什么区别呢?通过上面的内容,我们来比较一下他们之间的相似点和不同之处。

相似之处:

  • 当被否定时,两者的值都是true
  • 代表了一些不存在的东西...

差异之处:

  • null表示无,完全不存在的;undefined表示东西没有定义
  • undefined有自己的数据类型(undefined),null只是一个对象
  • 在基本算术运算中,null被视为0undefined返回的NaN

还有一些事情需要指出来:

Image may be NSFW.
Clik here to view.

undefined == null返回的值是true,因为JavaScript会尽力将两个值转换为相同类型。

第二个语句,undefined === null和第一个语句有点不同,他们还在比较数据类型(除了比值,还要比两者数据类型),加上JavaScript很聪明,可以看出他们之间的区别,所以返回的值是false

第三个和最后一个语句,!undefined == !null!undefined === !null实际上已经非常的简单。由于两个都是否定的返回值(否定的返回值都是true,而且其数据类型也相同),所以最终返回的值是true

Image may be NSFW.
Clik here to view.

NaN (Not a Number)

通过前文的学习,我们知道了什么是undefinednull,以及它们之间的差异性,接下来我们来讨论一下NaN的值。

全局NaN属性是一个表示非数字的值(MDN)。

我认为这个定义很清楚。当我们要得到的数字不是数字时,JavaScript会返回这个值。例如,当你试图用cucumber减去10或者用12除以R2D2时,它们返回的值为NaN

Image may be NSFW.
Clik here to view.

在某些情况下,你可能期望得到这个值,但事实不如你预期。

当你在字符串中添加一些东西的时候。如果JavaScript看到+符号和一个字符串,它会自动将第二个元素添加到字符串中。

Image may be NSFW.
Clik here to view.

当你用数字和布尔值一起运算的时候,布尔值会转换为10true转为1false转换为0

Image may be NSFW.
Clik here to view.

现在,棘手的(或者最棘手的)部分。NaN实际上是一个数字

Image may be NSFW.
Clik here to view.

嗯,所以我们可以说它代表了自身的缺失,对吗?更进一步,我们得出结论,它本质上是相反的。

Image may be NSFW.
Clik here to view.

所以NaN和它自身值作比较返回的值是false。幸运的是,我们有一个函数可以检查参数是否为NaNisNaN()

Image may be NSFW.
Clik here to view.

总结

null表示无、不存在或无效的对象或地址引用。它在简单的数学运算中会转换为0,它是一个全局对象。null == false返回的值是false

undefined是一个全局属性,原始值undefined。它告诉我们有些东西没有赋值,没有定义。undefined不能转换成任何数字,因此在数学计算中使用它,返回的是NaN

NaN表示一个不是数字的东西,尽管它实际上是一个数字。它不等于它本身,如果要检查是否有东西是NaN时,需要借助isNaN()函数。

JavaScript中喜欢转换值,因此你需要使用三重等号(===)来确保两个元素是否相同。

Image may be NSFW.
Clik here to view.

大漠

常用昵称“大漠”,W3CPlus创始人,目前就职于手淘。对HTML5、CSS3和Sass等前端脚本语言有非常深入的认识和丰富的实践经验,尤其专注对CSS3的研究,是国内最早研究和使用CSS3技术的一批人。CSS3、Sass和Drupal中国布道者。2014年出版《图解CSS3:核心技术与案例实战》。

如需转载,烦请注明出处:https://www.w3cplus.com/javascript/understanding-null-undefined-and-nan.html


Viewing all articles
Browse latest Browse all 1557

Trending Articles