[javascript] 如何使用非空值来更新另一个值(类似逻辑或赋值)

2020-12-16 22:15:10 +08:00
 Fnlxuer

代码如下,我需要用可能为 falsy 值的 b 来更新 a:

let a = 'default value'
let b = 'new value'

// 方案一
if (b) {
  a = b
}

// 方案二
a = b || a

// 方案三
a = b ? b : a

有没有像逻辑或赋值 a ||= b 之类的解决方案?

1755 次点击
所在节点    JavaScript
7 条回复
autoxbc
2020-12-16 23:08:45 +08:00
b 可能为 falsy,这些方法都不行。需要对 b 的「状态」做好约定,比如初始值是什么,怎么样算「更新」了

参考 ES6 的函数参数默认值设定,严格的 undefined 为未赋值状态,手工写的话就是 if( b === undefined )
jerrypp
2020-12-16 23:10:30 +08:00
a = b ?? a
ddsfeng
2020-12-16 23:16:34 +08:00
b && (a=b)
Kasumi20
2020-12-17 00:19:33 +08:00
a = typeof b === undefined ? a : b
KuroNekoFan
2020-12-17 06:09:08 +08:00
方案 2 不是挺好的吗
duan602728596
2020-12-17 07:58:16 +08:00
有真就有这个语法提案,不过需要 babel
vision1900
2020-12-17 10:23:40 +08:00
@jokycn0912 楼主要 falsy, ?? 操作符只能判断 null 或者 undefined, 遇到 0 或者 "" 就不会返回右边的值

我喜欢方案一,对于短路求值不感兴趣。方案 2 和 方案 3 都必须进行一次赋值操作,何必呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736184

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX