无法读取未定义的属性(读取“toString”)

无法读取未定义的属性(读取“toString”)

Cannot read property ‘toString’ of Undefined in JavaScript

“TypeError: Cannot read properties of undefined (reading ‘toString’)”错误发生在对一个toString()调用该方法时。undefined

要解决该错误,请确保仅对toString支持该方法的数据类型调用该方法。

无法读取未定义的属性 tostring

下面是错误如何发生的示例。

索引.js
const example = undefined; // ⛔️ TypeError: Cannot read properties of undefined (reading 'toString') example.toString();

如果该值未定义,则提供空字符串的回退

要解决该错误,请在调用该方法之前提供一个回退值toString()
,或者检查该值的类型是否正确。

索引.js
const example = undefined; // ✅ Using optional chaining ?. const ex1 = example?.toString() || ''; console.log(ex1); // 👉️ ""

我们使用了可选的链接 (?.)
运算符来避免出现错误。

undefined如果引用等于or ,则可选链接 (?.) 运算符会短路
null,否则它会调用该toString()方法。

请注意,我们还使用了逻辑 OR (||) 运算符来提供空字符串的后备值。
索引.js
const example = undefined; const result = example || ''; console.log(result); // 👉️ ""

如果左边的值是假的(例如 ),逻辑 OR (||) 运算符返回右边undefined

如果可选链接 (?.) 运算符短路,它会返回一个undefined
值。
为了保持一致性,我们在该场景中返回一个空字符串。

使用if语句避免错误

您还可以
在调用该方法之前
检查该值是否为真toString()

索引.js
const example = undefined; let result = ''; if (example) { result = example.toString(); } console.log(result); // 👉️ ""
if仅当存储在示例变量中的值是真实的时才满足条件

JavaScript 中的假值是:false, undefined, null, 0, ""
(空字符串),
NaN(不是数字)。

所有其他值都是真实的。

使用三元运算符避免错误

您还可以使用
三元运算符来避免出现错误。

索引.js
const example = undefined; const result = example ? example.toString() : ''; console.log(result); // 👉️ ""

三元运算符与语句非常相似if/else

它检查左边的值是否为真,如果是,运算符返回冒号左边的值,否则返回右边的值。

如果变量存储一个真值,我们返回调用方法的结果
toString(),否则,我们返回一个空字符串。

您还可以在调用该方法之前指定一个空字符串的回退值,toString()以避免出现错误。

索引.js
const example = undefined; const result = (example || '').toString(); console.log(result); // 👉️ ""

如果example变量存储一个虚假值(例如undefined),则返回一个空字符串。

追踪变量赋值的undefined位置

如果错误仍然存​​在,您必须追踪变量在何处被赋值
undefined

一个常见的值来源undefined是将不返回任何内容的函数的输出分配给变量。

许多在适当位置改变对象的内置方法返回undefined

所有不返回值的 JavaScript 函数都返回undefined

# 访问索引不存在的数组

当您在不存在的索引处访问数组并取回值时,通常会发生该错误undefined

索引.js
const arr = [123, 456, 789]; // ⛔️ TypeError: Cannot read properties of undefined (reading 'toString') const result = arr[3].toString();
JavaScript 索引是从零开始的,因此数组中的第一个元素的索引为0,最后一个元素的索引为 array.length - 1

示例中数组的最后一个索引是2.

索引.js
const arr = [123, 456, 789]; const result = arr[2].toString(); console.log(result); // 👉️ 789

您可以使用可选的链接 (?.) 运算符来避免在访问可能不存在的数组元素时出现错误。

索引.js
const arr = [123, 456, 789]; const result = arr[100]?.toString(); console.log(result); // 👉️ undefined

如果您希望将该值默认为空字符串(如果它是 )undefined,请使用逻辑 OR (||) 运算符。

索引.js
const arr = [123, 456, 789]; const result = arr[100]?.toString() || ''; console.log(result); // 👉️ ''

如果您必须访问可能不存在的索引处的嵌套数组元素,请使用相同的方法。

索引.js
const nestedArr = []; console.log(nestedArr?.[0]?.toString()); // 👉️ undefined console.log(nestedArr?.[0]?.[0]?.toString()); // 👉️ undefined console.log(nestedArr?.[0]?.[0]?.[1]?.toString()); // 👉️ undefined