Потенциально неопределенная переменная - PullRequest
0 голосов
/ 14 октября 2018

Я получаю ключи от глобальной переменной, которая потенциально не определена.Ключи тоже могут не существовать:

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, но неуклюжа и многословна.Этот случай происходит пару раз в моей кодовой базе, но не достаточно часто, чтобы ввести другую вспомогательную функцию в мою библиотеку утилит.Вместо этого я предпочел бы просто предоставить функцию получения, которая обрабатывается должным образом, что-то вроде:

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

Есть ли простой способ справиться с этим делом с помощью Lodash FP или Ramda API, которые я пропускаю?

1 Ответ

0 голосов
/ 14 октября 2018

Если ваша глобальная переменная определена на window (в случае глобальной var), вы можете проверить на window.globalFoo (или global.globalFoo в nodejs).Если нет, вам придется использовать проверку typeof.

Чтобы проверить свойство, которого нет в объекте, или неопределенную переменную, вы можете использовать lodash / fp's 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>
...