首页 > 解决方案 > 如何从包含未定义而不是错误的布尔表达式中获取错误?

问题描述

这是一个函数:

function isInvalid(value: any): boolean {
    return (value < min || value > max || value.length < minlength || value.length > maxlength || !pattern.test(value));
}

true只要满足任何条件,如何使函数返回,例如,何时value小于min 大于max

真正的问题是,右边的值可以是 undefined,但至少其中一个是定义的。在这种情况下,我总是会收到异常消息,例如ReferenceError: min is not defined. 是否可以跳过会抛出的条件ReferenceError并继续判断,直到表达式返回一个真正的布尔值?

可能语言不太清楚,可以想象成

如果value < min抛出ReferenceError,忽略它并判断 next( value > max),如果它也抛出错误,则再次忽略它并继续下一步,等等。当某个条件可能value.length > maxlength时,返回一个真正的 boolean true,然后将其返回给函数。

标签: javascripttypescript

解决方案


typeof在检查条件之前添加检查&&

function isInvalid(value: any): boolean {
    return (
      (typeof min !== 'undefined' && value < min) ||
      (typeof max !== 'undefined' && value > max) ||
      (typeof minlength !== 'undefined' && value.length < minlength) ||
      (typeof maxlength !== 'undefined' && value.length > maxlength) || 
      !pattern.test(value)
    );
}

: boolean另请注意,对于 Typescript,如果编译器可以从函数代码中推断出返回类型,则无需指定返回类型,因此如果需要,请随时省略。

也就是说,不确定是否会在某个点声明变量是一种代码味道。isInvalid如果可以的话,最好传递参数。

如果您不害怕undefined成为外部范围内的局部变量(非常罕见),您可以将其修剪为

  (min !== undefined && value < min) ||
  // ...

推荐阅读