转载

理解JavaScript中null、undefined和NaN

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

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

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

null

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

理解JavaScript中null、undefined和NaN

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

理解JavaScript中null、undefined和NaN

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

理解JavaScript中null、undefined和NaN

undefined

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

理解JavaScript中null、undefined和NaN

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

理解JavaScript中null、undefined和NaN

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

理解JavaScript中null、undefined和NaN

null vs undefined

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

相似之处:

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

差异之处:

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

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

理解JavaScript中null、undefined和NaN

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

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

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

理解JavaScript中null、undefined和NaN

NaN (Not a Number)

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

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

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

理解JavaScript中null、undefined和NaN

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

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

理解JavaScript中null、undefined和NaN

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

理解JavaScript中null、undefined和NaN

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

理解JavaScript中null、undefined和NaN

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

理解JavaScript中null、undefined和NaN

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

理解JavaScript中null、undefined和NaN

总结

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

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

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

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

理解JavaScript中null、undefined和NaN

大漠

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

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

原文  https://www.w3cplus.com/javascript/understanding-null-undefined-and-nan.html
正文到此结束
Loading...