gpt4 book ai didi

javascript - 有没有一种巧妙的方法可以在 JavaScript 中进行未定义的合并?

转载 作者:行者123 更新时间:2023-11-29 19:19:00 25 4
gpt4 key购买 nike

我正在寻找一种在 javascript 中使用 bool 值进行未定义合并的方法。对于正整数,我习惯于执行以下操作:

var x = i1 || i2 || i3 || i4;

这是一种“巧妙”的方式,但不是我所追求的。我正在寻找与 C# 中的 ?? 等效的内容。

var b1 = undefined;
var b2 = null;
var b3 = false;
var b4 = true;
var x = b1 || b2 || b3 || b4; //x == true (b4)

但是,我希望上面的代码在 false 时“停止”(在未定义或 null 时合并,但不是 false)。我正在执行此操作的应用程序类似于以下内容:

var threshold = argv[2] ?? process.env.threshold ?? config.threshold ?? 0.3;
var verbose = isTrue(argv[3] ?? process.env.verbose ?? config.verbose ?? false);

我正在寻找一种灵活的方法来做到这一点,类似于|| 运算符,而不是:

var verbose = false;
if (config.verbose !== undefined && config.verbose !== null) verbose = isTrue(config.verbose);
if (process.env.verbose !== undefined && process.env.verbose !== null) verbose = isTrue(process.env.verbose);
if (argv[3] !== undefined && argv[3] !== null) verbose = isTrue(argv[3]);

同样,我希望阈值接受“0”阈值,并跳过任何未定义或空值。

最佳答案

我能想到的最巧妙的方法(不添加额外的功能)是:

var x = [b1, b2, b3, b4].find(x => x !== null && x !== undefined);

如果要反复使用它,请定义一个函数来为您完成所有工作:

function coalesce() {
return [].find.call(arguments, x => x !== null && x !== undefined);
}

var x = coalesce(b1, b2, b3, b4);

注意:上面使用的 ES2015 语法和功能!用“旧”语法重写并填充 Array.prototype.any 是微不足道的旧版浏览器的功能。

另请注意,如果没有对合并运算符的 native 支持,所有 上述参数将被评估 - 您将失去 || 短路的优势或 ??其中,如果返回左侧表达式,则不会计算右侧表达式。

关于javascript - 有没有一种巧妙的方法可以在 JavaScript 中进行未定义的合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926965/

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