V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Fnlxuer
V2EX  ›  JavaScript

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

  •  1
     
  •   Fnlxuer · 2020-12-16 22:15:10 +08:00 · 1746 次点击
    这是一个创建于 1227 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    let a = 'default value'
    let b = 'new value'
    
    // 方案一
    if (b) {
      a = b
    }
    
    // 方案二
    a = b || a
    
    // 方案三
    a = b ? b : a
    

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

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

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

    我喜欢方案一,对于短路求值不感兴趣。方案 2 和 方案 3 都必须进行一次赋值操作,何必呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1087 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:54 · PVG 02:54 · LAX 11:54 · JFK 14:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.