繁星点点滴滴
恐怕没有真正更短的方法来做到这一点(从技术上讲,是一种较小的方法,然后是一种更迟钝的方法)我尝试使用nullish 运算??符,但我不得不说工作解决方案似乎比我提出的方案更丑陋。本质上,它归结为这样一个事实:您正在寻找 nullish 运算符的否定(或者 nullish 三元),遗憾的是这两个运算符都不存在。这是一个相对紧凑的解决方案,它只是改进了您的解决方案,并通过使用逻辑&&AND简化了它短路操作员const notNullish = (value) => value !== null && typeof value !== 'undefined'const foo = (a, b) => ({ ...(notNullish(a) && {a}), ...(notNullish(b) && {b}), })console.log('foo(6, 7) =>', foo(6, 2))console.log('foo(6) =>', foo(6))console.log('foo() =>', foo())console.log('foo(0, false) =>', foo(0, false))现在正如我所说,没有最佳的方法来做到这一点,因为虽然您可以使用逻辑??来检查,但它不能同时直接分配给对象属性。我能想到的最好的办法是:const notNullish = (key, value) => { const nullishCheck = value ?? 'IS_NULLISH' return nullishCheck === 'IS_NULLISH' ? {} : {[key]: value}}const foo = (a, b) => ({ ...notNullish('a', a), ...notNullish('b', b)})console.log(foo(6, 4))console.log(foo(6))console.log(foo())console.log(foo(0, false))但就我个人而言,我发现第二个片段有点丑陋,可能会选择第一个选项,特别是出于以下三个原因在我看来,它只是看起来更丑??Explorer 和 Node.js 尚未完全支持该运算符可能很多人都不熟悉该运算符,这迫使您甚至不直接使用它,而是将其用作分配检查。