
代码如下,我需要用可能为 falsy 值的 b 来更新 a:
let a = 'default value' let b = 'new value' // 方案一 if (b) { a = b } // 方案二 a = b || a // 方案三 a = b ? b : a 有没有像逻辑或赋值 a ||= b 之类的解决方案?
1 autoxbc 2020-12-16 23:08:45 +08:00 b 可能为 falsy,这些方法都不行。需要对 b 的「状态」做好约定,比如初始值是什么,怎么样算「更新」了 参考 ES6 的函数参数默认值设定,严格的 undefined 为未赋值状态,手工写的话就是 if( b === undefined ) |
2 jerrypp 2020-12-16 23:10:30 +08:00 via Android a = b ?? a |
3 xqin 2020-12-16 23:16:34 +08:00 b && (a=b) |
4 Kasumi20 2020-12-17 00:19:33 +08:00 a = typeof b === undefined ? a : b |
5 KuroNekoFan 2020-12-17 06:09:08 +08:00 via iPhone 方案 2 不是挺好的吗 |
6 duan602728596 2020-12-17 07:58:16 +08:00 via iPhone 有真就有这个语法提案,不过需要 babel |
7 vision1900 2020-12-17 10:23:40 +08:00 @jokycn0912 楼主要 falsy, ?? 操作符只能判断 null 或者 undefined, 遇到 0 或者 "" 就不会返回右边的值 我喜欢方案一,对于短路求值不感兴趣。方案 2 和 方案 3 都必须进行一次赋值操作,何必呢 |