代码之家  ›  专栏  ›  技术社区  ›  Estus Flask

潜在未定义变量

  •  0
  • Estus Flask  · 技术社区  · 7 年前

    import { get } from 'lodash/fp';
    
    const probablyGlobalFoo = typeof globalFoo === 'undefined' ? void 0 : globalFoo;
    
    const baz = get('baz', probablyGlobalFoo) || get('bar.baz', probablyGlobalFoo) || 'baz';
    

    typeof globalFoo === 'undefined' check对于JavaScript来说是惯用的,但是笨拙而冗长。这种情况在我的代码库中出现过几次,但不足以向我的utils库引入另一个helper函数。我更愿意只提供getter函数,而不是正确处理的函数,例如:

    getFromAGetterAndCatchIfNotDefined('bar.baz', () => globalFoo);
    

    有没有一个简单的方法来处理我丢失的Lodash FP或Ramda api的情况?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ori Drori    7 年前

    如果全局变量定义在 window var window.globalFoo (或 global.globalFoo typeof 检查。

    getOr()

    const { getOr } = _;
    
    console.log(getOr('baz', 'bar.baz', window.globalFoo));
    
    const anotherValue = { bar: { baz: 5 } }
    
    console.log(getOr('baz', 'bar.baz', anotherValue));
    <script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)"></script>

    get() :

    const { get } = _;
    
    console.log(get(window.globalFoo, 'bar.baz', 'baz'));
    
    const anotherValue = { bar: { baz: 5 } }
    
    console.log(get(anotherValue, 'bar.baz', 'baz'));
    <script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js)"></script>

    pathOr() :

    const { pathOr } = R;
    
    console.log(pathOr('baz', ['bar','baz'], window.globalFoo));
    
    const anotherValue = { bar: { baz: 5 } }
    
    console.log(pathOr('baz', ['bar','baz'], anotherValue));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>