可能未定义的变量
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>
我正在从可能未定义的全局变量中获取键。密钥也可能不存在:
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>