javascript - 如何从包含未定义而不是错误的布尔表达式中获取错误?
问题描述
这是一个函数:
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
时,返回一个真正的 booleantrue
,然后将其返回给函数。
解决方案
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) ||
// ...
推荐阅读
- oracle - 我在创建 TRIGGER 时犯了什么错误?
- java - Java Monitors:块代码段或代码段使用的块资源?
- angular - 我想在函数执行时在地图上添加图层
- django - 由于 requirements.txt 错误,无法在 Heroku 中部署 Django 应用
- nms - .Net 中的 AMQ - 证书或凭据
- for-loop - 为什么 for 循环的初始化器用方括号括起来?
- javascript - ngRepeat-每当我单击下拉菜单中的“全部”选项时,浏览器都会无响应
- angular - 我应该在 Ionic 5 中使用 Ngrx 吗?
- shell - 在特定 anaconda 环境下运行 spyder 的 cmd 行
- javascript - 编码 Discord 机器人时“无法读取未定义的属性‘toLowerCase’”