gpt4 book ai didi

javascript - ES6函数参数验证

转载 作者:行者123 更新时间:2023-11-28 14:49:46 25 4
gpt4 key购买 nike

我在2ality上读到了处理所需函数参数的很好的模式。 .

function throwIfMissing() {
throw new Error('Missing parameter');
}
function foo(mustBeProvided = throwIfMissing()) {
return mustBeProvided;
}

有没有这样好的、干净的方法来抛出验证错误?

function throwIfInvalid(value) {
const max = 10;
const min = 5;

if(value < min || value > max){
throw new Error(`Value must be between ${min} ${max}`);
}

return value;
}

function foo(mustBeValid = throwIfInvalid()) {
return mustBeValid;
}

当然,throwIfInvalid() 函数无法按预期工作。我的问题是是否有任何技巧可以使其发挥作用。?

最佳答案

当然不行,我想你误解了Default Parameters工作。

当你写

function foo(mustBeProvided = throwIfMissing())

您将throwIfMissing的结果分配给参数IF AND ONLY IF参数是未定义

这意味着如果提供了该参数,则根本不会调用throwIfMissing;它永远不会执行,也永远不会检查参数的有效性。

这就是为什么您只能使用此“技巧”对未定义的参数使用react,而不能验证参数。

--

替代解决方案

就我个人而言,我会用一个简单的解决方案来解决问题

function checkRange(val, min, max) {
if (val > max || val < min) {
throw new Error();
}
}

function foo(val) {
checkRange(val, 5, 10);
return val;
}

您可能会认为这不太优雅,但请记住,在这种情况下,您可以使用不同的值重用验证器,而不必对最小值和最大值进行硬编码。

如果您正在寻找 npm 模块,您可以尝试 this one但我不会为了简单的验证而走那么远。

关于javascript - ES6函数参数验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44945586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com