搜索

处理JavaScript中未定义的7个技巧

发布网友 发布时间:2024-10-23 18:03

我来回答

1个回答

热心网友 时间:2024-10-24 17:12

处理JavaScript中未定义值的7个技巧

当我在大约8年前开始学习JavaScript,我发现奇怪的是,undefined和null都代表空值。它们之间的确切区别是什么?两者似乎都定义了空值,比较结果null == undefined为true。但是JavaScript是不同的。undefined访问尚未初始化的变量或对象属性时,JavaScript解释器将返回。例如:

另一方面,null表示缺少的对象引用。JavaScript不会使用初始化变量或对象属性null。

某些本机方法String.prototype.match()可以返回null以表示丢失的对象。看一下示例:

因为JavaScript是允许的,所以开发人员倾向于访问未初始化的值。我也对这种不当行为感到内疚。

通常,此类冒险行为会产生undefined相关的错误:

JavaScript开发人员可以理解这个笑话的讽刺意味:

为了减少发生此类错误的风险,您必须了解发生这种情况的情况undefined。更重要的是,抑制其外观并在您的应用程序中传播,从而提高代码的持久性。

让我们探索一下undefined它对代码安全性的影响。

1. 未定义的是什么

JavaScript有6种原始类型:数字、字符串、布尔值、null、undefined和符号。以及一个单独的对象类型:{name: "Dmitri"},["apple", "orange"]。来自6个原始类型的undefined是一个特殊值,其自身的类型为Undefined。根据 ECMAScript规范:

未给变量赋值时,使用未定义的值原始值。

该标准明确定义了您在访问未初始化的变量,不存在的对象属性,不存在的数组元素等时将收到的信息。

2. 创建未定义的常见方案
2.1 未初始化的变量

默认情况下,尚未赋值的声明变量是未初始化的undefined。

示例代码:myVariable = 'Initial value'

解决未初始化变量问题的有效方法是尽可能分配初始值。变量以未初始化状态存在的次数越少越好。理想情况下,您应该在声明之后立即分配一个值const myVariable = 'Initial value'。但这并不总是可能的。

2.2 访问不存在的属性

访问不存在的对象属性时,JavaScript返回undefined。

示例代码:favoriteMovie = { title: "The Matrix" }; favoriteMovie.actors

访问不存在的属性不会引发错误。当试图从不存在的属性值中获取数据时,就会出现真正的问题。这是最常见的undefined 陷阱,反映在众所周知的错误消息中TypeError: Cannot read property of undefined。

3. 数组中未定义

undefined当访问具有越界索引的数组元素时,您会得到提示。

colors阵列具有3个元素,从而有效索引0,1和2。 因为在索引5和处没有数组元素-1,所以访问器colors[5]和 colors[-1]是undefined。

在JavaScript中,您可能会遇到所谓的稀疏数组。这些是有间隙的数组,即在某些索引处,未定义任何元素。

当在稀疏数组中访问间隙(也称为空插槽)时,也会得到一个undefined。

4. undefined和null之间的区别

主要区别在于undefined代表尚未初始化的变量的值,而null代表有意缺少的对象。

例如,变量number已定义,但是未分配初始值:

number变量为undefined,表示未初始化的变量。

访问不存在的对象属性时,也会得到undefined:

由于lastName属性不存在obj,因此JavaScript正确评估obj.lastName为undefined。

另一方面,您知道变量需要一个对象。但是由于某种原因,您无法实例化该对象。在这种情况下,null是丢失对象的有意义的指示。

例如,clone()是克隆纯JavaScript对象的函数。该函数应返回一个对象:

但是,clone()可以使用非对象参数调用:15或null(或通常是原始值null或undefined)。在这种情况下,该函数无法创建克隆,因此它将返回null-缺少对象的指示符。

结论

在JavaScript中存在undefined是允许的性质,该性质允许使用未初始化的变量和属性。但是,直接比较undefined大多数情况比较不好,因为您可能会依赖上述允许但不鼓励的做法。一种有效的策略是至少减少代码中关键字的出现。同时,请始终记住其令人惊讶的外观,并通过应用有益的习惯来防止出现这种情况。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top