无法读取未定义的属性(读取“toString”)
Cannot read property ‘toString’ of Undefined in JavaScript
“TypeError: Cannot read properties of undefined (reading ‘toString’)”错误发生在对一个值toString()
调用该方法时。undefined
要解决该错误,请确保仅对toString
支持该方法的数据类型调用该方法。
下面是错误如何发生的示例。
const example = undefined; // ⛔️ TypeError: Cannot read properties of undefined (reading 'toString') example.toString();
如果该值未定义,则提供空字符串的回退
要解决该错误,请在调用该方法之前提供一个回退值toString()
,或者检查该值的类型是否正确。
const example = undefined; // ✅ Using optional chaining ?. const ex1 = example?.toString() || ''; console.log(ex1); // 👉️ ""
我们使用了可选的链接 (?.)
运算符来避免出现错误。
undefined
如果引用等于or ,则可选链接 (?.) 运算符会短路
null
,否则它会调用该toString()
方法。
const example = undefined; const result = example || ''; console.log(result); // 👉️ ""
如果左边的值是假的(例如 ),逻辑 OR (||) 运算符返回右边的值undefined
。
如果可选链接 (?.) 运算符短路,它会返回一个undefined
值。为了保持一致性,我们在该场景中返回一个空字符串。
使用if
语句避免错误
您还可以
在调用该方法之前检查该值是否为真toString()
。
const example = undefined; let result = ''; if (example) { result = example.toString(); } console.log(result); // 👉️ ""
if
仅当存储在示例变量中的值是真实的时才满足条件。JavaScript 中的假值是:false
, undefined
, null
, 0
, ""
(空字符串),NaN
(不是数字)。
所有其他值都是真实的。
使用三元运算符避免错误
您还可以使用
三元运算符来避免出现错误。
const example = undefined; const result = example ? example.toString() : ''; console.log(result); // 👉️ ""
三元运算符与语句非常相似if/else
。
如果变量存储一个真值,我们返回调用方法的结果
toString()
,否则,我们返回一个空字符串。
您还可以在调用该方法之前指定一个空字符串的回退值,toString()
以避免出现错误。
const example = undefined; const result = (example || '').toString(); console.log(result); // 👉️ ""
如果example
变量存储一个虚假值(例如undefined
),则返回一个空字符串。
追踪变量赋值的undefined
位置
如果错误仍然存在,您必须追踪变量在何处被赋值
undefined
。
undefined
是将不返回任何内容的函数的输出分配给变量。许多在适当位置改变对象的内置方法返回undefined
。
所有不返回值的 JavaScript 函数都返回undefined
。
# 访问索引不存在的数组
当您在不存在的索引处访问数组并取回值时,通常会发生该错误undefined
。
const arr = [123, 456, 789]; // ⛔️ TypeError: Cannot read properties of undefined (reading 'toString') const result = arr[3].toString();
0
,最后一个元素的索引为。 array.length - 1
示例中数组的最后一个索引是2
.
const arr = [123, 456, 789]; const result = arr[2].toString(); console.log(result); // 👉️ 789
您可以使用可选的链接 (?.) 运算符来避免在访问可能不存在的数组元素时出现错误。
const arr = [123, 456, 789]; const result = arr[100]?.toString(); console.log(result); // 👉️ undefined
如果您希望将该值默认为空字符串(如果它是 )undefined
,请使用逻辑 OR (||) 运算符。
const arr = [123, 456, 789]; const result = arr[100]?.toString() || ''; console.log(result); // 👉️ ''
如果您必须访问可能不存在的索引处的嵌套数组元素,请使用相同的方法。
const nestedArr = []; console.log(nestedArr?.[0]?.toString()); // 👉️ undefined console.log(nestedArr?.[0]?.[0]?.toString()); // 👉️ undefined console.log(nestedArr?.[0]?.[0]?.[1]?.toString()); // 👉️ undefined