处理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大多数情况比较不好,因为您可能会依赖上述允许但不鼓励的做法。一种有效的策略是至少减少代码中关键字的出现。同时,请始终记住其令人惊讶的外观,并通过应用有益的习惯来防止出现这种情况。