原文:JavaScript quirk 2: two “non-values” – undefined and null
译文:「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null
译者:SingleSeeker
此文是 javascript 的 12 个怪癖(quirks) 系列的第二篇。 感谢 @SingleSeeker 对本文的翻译。
以下是正文:
对于“空值”或“空引用”,大多数编程语言只有一个值。比如,在 Java 中用的是 null。 但是在 Javascript 中却有两个特殊的值:undefined 和 null。 他们基本上是相同,但用法上却略有些不同。 在这个 系列教程 的最后,我会解释一下在 ECMAScript 6 中的一些变化。
undefined 是被语言本身所分配的。 如果一个变量还没有被初始化,那么它的值就是 undefined:
> var foo; > foo undefined
同理,当缺失参数时 JavaScript 会分配一个 undefined:
> function id(x) { return x } > id() undefined
null 是被开发者用来明确指出某个值是缺失的, 例如,对于 JSON.stringify():
> console.log(JSON.stringify({ first: 'Jane' }, null, 4)) { "first": "Jane" }
校检:一个变量是否有值?
如果你想知道变量 v 是否有值,正常情况下,你需要同时检验 undefined 与 null。 幸运的是两个值都是 false 型。 因此,只用一个判断,就可以同时检验这两项是否为真:
if (v) { // v 有值 } else { // v 没有值 }
在本 系列 的第 5 部分——关于函数参数的处理——你将会看到更多的上面校检例子。 有一点要注意的是:这个检查也会把 false,-0, +0, NaN 与 '' 当成“空值”。 如果这不是你想要的,那么就不能使用上面的校检方法了。
你有两个选择。
有些人提倡使用不等于(!=)来校检 v 既不是 undefined 或 null:
if (v != null) { // v 有值 } else { // v 没有值 }
不过,这要求你要明白 != 认为 null 只等于它自己或是 undefined。 我喜欢用更有可读性的 !==:
if (v !== undefined && v !== null) { // v 有值 } else { // v 没有值 }
性能方面,所有在这个章节中提到的这三个校检基本是相同的。 所以,最后用哪个取决于你的需求还有你的品味。 一些压缩工具甚至用!= 重写了最后一条校检。
相关推荐
在 JavaScript 中,undefined、null、NaN 是三个经常被混淆的概念,但它们有着不同的含义和用途。今天,我们将深入探讨这三个概念的区别和应用。 undefined 在 JavaScript 中,undefined 是一个基本数据类型,表示...
在JavaScript编程中,undefined和null是两种特殊的值,它们在处理变量和对象时扮演着重要的角色。尽管它们都表示“没有值”的概念,但它们之间存在着一些关键的区别。本文将深入探讨undefined和null的含义、用途以及...
JavaScript 类型系统中的 `undefined` 和 `null` 是两种特殊的原始值,它们分别代表不同的概念。在 JavaScript 中,每个变量都有一个类型,当变量未初始化或引用的对象不存在时,就会出现 `undefined` 或 `null`。 ...
JavaScript 类型系统中的 `undefined` 和 `null` 是两种特殊的原始值,它们分别代表不同的概念。`undefined` 主要用于表示变量已经声明但未被赋值的情况,而 `null` 则是一个特意设置的值,通常用来表示一个“空”的...
在JavaScript中,使用`==`比较运算符比较`undefined`和`null`会得到`true`,因为这两个值在松散相等比较中被视为相等。然而,使用严格相等运算符`===`比较时,它们被认为是不相等的,因为它们是两种不同的数据类型:...
在JavaScript编程中,`undefined`与`null`是非常常见的两种基本数据类型。虽然它们都表示某种形式的“无”或“空”,但在实际使用中两者有着本质的区别。理解这些区别对于编写高质量、可维护的代码至关重要。 #### ...
在JavaScript中,`false`、`0`、`null`、`undefined`和空字符串`""`是五个特殊的值,它们在编程中扮演着不同的角色。理解它们的类型、等价性和在条件语句中的行为是至关重要的。 首先,让我们看看它们的类型: - `...
JavaScript中Null与Undefined的区别解析主要涉及两种特殊数据类型:Null和Undefined。这两种类型是JavaScript中的原始类型,它们经常会使开发者混淆,尤其是在变量的赋值和比较操作中。本文将通过多个实例,详细解释...
在无空值的环境下,比较运算的结果有两个可能的逻辑值:true 或 false,这种逻辑称为二值逻辑。空值引入后,二值逻辑就不能适应空值环境了,比较运算可能有三种结果:true、false 或 unknown,称为三值逻辑。 NULL ...
### ASP.NET中对数据库表插入NULL空值的问题 在ASP.NET开发过程中,向数据库表插入数据时遇到NULL值处理不当的...通过上述方法,可以有效地解决ASP.NET中数据库表插入NULL空值的问题,提高应用程序的稳定性和可靠性。
在JavaScript编程语言中,`null` 和 `undefined` 是两个重要的概念,它们都用来表示某种“不存在”或“没有”的状态,但它们之间存在着微妙的差异。了解这些差异对于编写健壮的JavaScript代码至关重要。 首先,`...
IS NULL 和 IS NOT NULL 是两个特殊的谓词,用于判断元组该列是否为空值。它们可以帮助我们更好地处理空值。 4. 对存在取空值的列按值进行 ORDER BY 排序 在进行 ORDER BY 排序时,如果某列存在空值,那么这些空值...
在JavaScript编程语言中,`null`和`undefined`是两个非常基础且重要的概念。虽然它们经常被用来表示“无值”或“空值”,但它们之间还是存在着一些关键性的区别。本文将详细探讨这两个概念的含义、用法以及它们之间...
在JavaScript编程语言中,null和undefined是两个非常基础且常用的特殊值。尽管它们看起来相似,但它们在JavaScript中有着本质上的区别和各自的应用场景。本文将详细探讨这两个特殊值的相同点和不同点,以及在实际...
在JavaScript编程语言中,`undefined` 和 `null` 是两种特殊的数据类型,它们都表示“没有值”,但具有不同的含义和使用场景。了解这两者的差异对于编写健壮的JavaScript代码至关重要。 首先,让我们来明确两者的...
这两个概念对于理解和编写健壮的JavaScript代码至关重要,特别是对于那些处理变量状态和数据类型的开发者。 首先,让我们来探讨 `undefined`。`undefined` 是一种类型,它只有一个值,就是 `undefined` 本身。当你...
JavaScript 类型系统中,`undefined` 和 `null` 是两种重要的原始值,它们各自具有特定的含义和用途。本文将深入探讨这两种类型的起源、差异、使用场景以及类型转换。 首先,`undefined` 在 JavaScript 中主要表示...
MySQL有一个特殊的等于运算符“”,当两个表达式彼此相等或都等于空值时,它的值为TRUE,其中有一个空值或都是非空值但不相等,这个条件就是FALSE。 【例】 查询Sell表中还未收货的订单情况。 SELECT * FROM Sell ...