首页 > 解决方案 > 在可能未定义的对象上调用函数 javascript

问题描述

我正在尝试用javascript写这个:

if ($("#locations > tr > th").attr("id").endsWith("_5"))

如果不是未定义,这可以正常工作$("#locations > tr > th"),但如果它是错误将被抛出,因为您不能在未定义时调用 endsWith。如果项目未定义,或者如果语句返回 false,有没有办法返回 false?这是我目前拥有的,但我将不得不经常这样做,所以如果可能的话,我更喜欢用更短的方式来编写它。

var attr = $("#locations > tr > th").attr("id")
if (attr != undefined && attr.endsWith("_5") { ...

标签: javascript

解决方案


一个快速的技巧是替换空字符串,endsWith可以调用它:

if (($("#locations > tr > th").attr("id") || '').endsWith('_5')) {
  // ...
}

如果你正在使用 Babel(这对于一个合理规模的专业项目来说是一个好主意),或者如果你在浏览器实现它后遇到这个问题,你也可以使用可选链

if ($("#locations > tr > th").attr("id")?.endsWith('_5')) {
  //                                    ^ optional chaining
  // ...
}

(如果不存在,?.则将解决,而不是继续处理并抛出错误)undefined.attr('id')endsWith


推荐阅读