可能未定义的变量

Potentially undefined variable

我正在从可能未定义的全局变量中获取键。密钥也可能不存在:

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' 检查是 JavaScript 的惯用方法,但笨拙且冗长。这种情况在我的代码库中出现过几次,但不足以将另一个辅助函数引入我的 utils 库。我宁愿只提供 getter 函数而不是正确处理的函数,例如:

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

有没有一种直接的方法可以使用我缺少的 Lodash FP 或 Ramda API 来处理这种情况?

如果你的全局变量定义在window上(在全局var的情况下),你可以检查window.globalFoo(或nodejs中的global.globalFoo)。如果不是,则必须使用 typeof 检查。

要检查对象中不存在的 属性 或未定义的变量,您可以使用 lodash/fp 的 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>

或者 lodash 的 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>

或者ramda的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>