[英]I have the error Uncaught TypeError: Cannot read property 'toLowerCase' of undefined
[英]ERROR TypeError: Cannot read property 'toLowerCase' of undefined for Pipe
我有这个 pipe 和标题中的这个错误。
可能如果undefined
数组中的任何值都可以,但是如何避免此错误?
export class MusclePipe implements PipeTransform {
transform(muscle, searchTerm: string): MuscleComponent {
if (!muscle || !searchTerm) {
return muscle;
}
return muscle.filter(
(muscle) =>
muscle.name.toLowerCase().indexOf(searchTerm.toLowerCase()) !== -1
);
}
}
通常,这意味着您正在迭代的一个或多个muscle
对象上不存在name
属性。
理想情况下,您希望确保数据存在。 但是在您的情况下,如果有可能不是,最简单(也是最低限度正确)的方法是在可能是可选的键之后使用可选链接(?。):
transform(muscle: [], searchTerm: string): MuscleComponent {
....
return muscle.filter(muscle =>
muscle.name?.toLowerCase().indexOf(searchTerm.toLowerCase()) !== -1);
}
}
(注意muscle.name
后的?
)。
但由于您正在调用方法调用,您可以执行以下操作:
return muscle.filter(muscle => {
muscle.name && searchTerm
? muscle.name.toLowerCase().indexOf(searchTerm.toLowerCase()) !== -1)
: 'alternative return value';
}
}
在这里,我们使用三元运算符 (if..else) 来显式检查值并返回替代值。 我还添加了对searchTerm
的检查是否也可能未定义:
muscle.name && searchTerm
如果肌肉没有正确定义name
属性,您还应该进行检查,因为这似乎是您遇到的错误。
export class MusclePipe implements PipeTransform {
transform(muscle, searchTerm: string): MuscleComponent {
if (!muscle || !muscle.name || !searchTerm) {
return muscle;
}
return muscle.filter(
(muscle) =>
muscle.name.toLowerCase().indexOf(searchTerm.toLowerCase()) !== -1
);
}
}
在调用 .toLowerCase 之前,在 pipe 中添加一个空/未定义检查以检查字符串是否为.toLowerCase
if (str === undefined) return [];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.