是否有一个通用的JavaScript函数来检查变量是否有值并确保它不是undefined或null?我有这个代码,但我不确定它是否涵盖了所有情况:
function isEmpty(val){
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
Run Code Online (Sandbox Code Playgroud) 如果我有一个对象的引用:
var test = {};
Run Code Online (Sandbox Code Playgroud)
可能(但不是立即)有嵌套对象,如:
{level1: {level2: {level3: "level3"}}};
Run Code Online (Sandbox Code Playgroud)
在最深层嵌套的对象中测试密钥是否存在的最佳方法是什么?
alert(test.level1);收益率undefined,但alert(test.level1.level2.level3);失败了.
我现在正在做这样的事情:
if(test.level1 && test.level1.level2 && test.level1.level2.level3) {
alert(test.level1.level2.level3);
}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更好的方法.
一个"问题",我时不时地有一个对象,例如user = {},通过使用应用程序的过程,这将被填充.让我们说一下,在AJAX调用之后或者我这样做的事情:
user.loc = {
lat: 50,
long: 9
}
Run Code Online (Sandbox Code Playgroud)
在另一个地方,我想检查是否user.loc.lat存在.
if (user.loc.lat) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
如果它不存在,这将导致错误.如果user.loc.lat是undefined,user.loc当然也是undefined如此.
"Cannot read property 'lat' of null" - Dev Tools error
Run Code Online (Sandbox Code Playgroud)
这意味着我需要像这样检查:
if (user.loc) {
if (user.loc.lat) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
要么
if (user.loc && user.loc.lat) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这不是很漂亮,我的对象越大越好 - 显然(想象10级嵌套).它种烧伤我,if(user.loc.lat)不只是返回false,如果user.loc是undefined也.
检查这种情况的理想方法是什么?
我试图找到一种优雅的方法来检查对象中是否存在某些深度属性.因此,实际上试图避免对未定义的怪异保护性检查.
if ((typeof error !== 'undefined') &&
(typeof error.responseJSON !== 'undefined') &&
(typeof error.responseJSON.error) &&
(typeof error.responseJSON.error.message)) {
errorMessage = error.responseJSON.error.message;
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑的是一个方便功能
if (exists(error.responseJSON.error.message)) { ... }
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?为方便起见,使用下划线 - 库是可以的解决方案.