Javascript 潜在未定义变量
我从可能未定义的全局变量中获取密钥。密钥也可能不存在:Javascript 潜在未定义变量,javascript,lodash,ramda.js,Javascript,Lodash,Ramda.js,我从可能未定义的全局变量中获取密钥。密钥也可能不存在: 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
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的这种情况?如果您的全局变量是在
window
上定义的(在全局var
的情况下),您可以在nodejs中检查window.globalFoo
(或global.globalFoo
)。如果没有,则必须使用类型的
检查
要检查对象中不存在的属性或未定义的变量,可以使用lodash/fp:
const{getOr}=\;
log(getOr('baz','bar.baz',window.globalFoo));
常量另一个值={bar:{baz:5}
log(getOr('baz','bar.baz',另一个值))代码>
如果您的全局变量是在窗口中定义的(在全局var
的情况下),您可以检查window.globalFoo
(或在nodejs中的global.globalFoo
)。如果没有,则必须使用类型的
检查
要检查对象中不存在的属性或未定义的变量,可以使用lodash/fp:
const{getOr}=\;
log(getOr('baz','bar.baz',window.globalFoo));
常量另一个值={bar:{baz:5}
log(getOr('baz','bar.baz',另一个值))代码>
我之所以没有使用窗口
是因为该代码与平台无关,我不想用窗口
vs全局
检测来阻碍它,因为我要的是明确的全局
。感谢您的getOr
/pathOr
提示。除非它是非常独特的,否则您可以使用以下命令在global
和window
之间进行选择。我希望尽可能避免这种检测,考虑到我们有定义了global
变量的浏览器和带有window
的节点环境。无论如何,似乎typeof
就是这样R.tryCatch
是我发现的唯一相关的东西,它导致了更详细的代码。我没有使用window
的原因是,代码是不可知平台的,我不想用window
vsglobal
检测来阻碍它,因为它特别是globalFoo
我想要的。感谢您的getOr
/pathOr
提示。除非它是非常独特的,否则您可以使用以下命令在global
和window
之间进行选择。我希望尽可能避免这种检测,考虑到我们有定义了global
变量的浏览器和带有window
的节点环境。无论如何,似乎typeof
就是这样R.tryCatch
是我找到的唯一相关的东西,它会导致更详细的代码。