推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Fnlxuer

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

  •  1
     
  •   Fnlxuer · Dec 16, 2020 · 2555 views
    This topic created in 2004 days ago, the information mentioned may be changed or developed.

    代码如下,我需要用可能为 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 replies    2020-12-17 10:23:40 +08:00
    autoxbc
        1
    autoxbc  
       Dec 16, 2020
    b 可能为 falsy,这些方法都不行。需要对 b 的「状态」做好约定,比如初始值是什么,怎么样算「更新」了

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

    我喜欢方案一,对于短路求值不感兴趣。方案 2 和 方案 3 都必须进行一次赋值操作,何必呢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3221 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 03:24 · PVG 11:24 · LAX 20:24 · JFK 23:24
    ♥ Do have faith in what you're doing.