Javascript“deep"检查是否有定义
Javascript "deep" check for defined
我可以发誓,曾经有一次,我遇到一些代码,使用一些js库(可能是lodash?? ?)做一个"深度"检查是否有东西被定义。
的例子:
someLib.isDefined(anObject.aNestedObject.anotherNestedObject);
(如果定义了另一个nestedobject将返回true,但如果anObject或aNestedObject未定义将返回false(并且不会抛出异常)。
是我完全在做梦吗,还是有一些众所周知的函数可以做到这一点?
正如我在评论中所写的,我认为这是不可能的。
表达式anObject.aNestedObject.anotherNestedObject
在someLib.isDefined
函数被调用之前求值,因此在函数有机会做任何事情之前会抛出异常(如果anObject或aNestedObject不存在)。
也许如果你把它作为一个字符串传递:someellib . isdefined (" anobject . anestedoobject . anothernestedobjec ")
但是,像这样检查很容易:
if (anObject && anObject.aNestedObject && anObject.aNestedObject.anotherNestedObject) {
...
}
或者只是实现你自己的函数,这很简单:
function exists(obj: any, keys: string | string[]) {
if (typeof keys === "string") {
keys = keys.split(".");
}
return keys.every(key => {
if (!obj) {
return false;
}
obj = obj[key];
return true;
});
}
(code in playground)
Lodash's has():
_.has(object, path)
的例子:
var object = {a: {b: 'test', c: 'test2'}};
_.has(object, 'a.b');
// => true
_.has(object, 'a.d');
// => false
全部文档
_.has()
不,没有众所周知的函数可以做到这一点,但您可以通过以下方式安全地检查:
if (typeof anObject != "undefined"
&& typeof anObject.aNestedObject != "undefined"
&& typeof anObject.aNestedObject.anotherNestedObject != "undefined") {
console.log("defined");
}else{
console.log("undefined");
}
相关文章:
- 使用map来检查是否为真'不起作用
- 检查是否存在使用chrome扩展的javascript库
- 检查是否存在任意控制器/操作
- 检查是否已加载原型
- angularJs检查是否输入
- Phonegap应用程序检查是否启用了推送通知
- 检查是否已设置GET变量
- 检查是否可以在另一个数组中找到所有项
- 如何检查是否存在“;没有到主机的路由”;在流式传输视频的过程中一遍又一遍
- Javascript-检查是否设置了cookie
- AngularJs 检查是否未定义和空的最佳实践
- 如何检查是否启用了 javascript 并将其纳入网页
- 检查是否对任何输入文件进行了更改
- 如何检查是否调整浏览器大小的条件
- 重力表格 - gform_post_render检查是否提交
- 检查是否释放了 HTML 按钮
- 循环遍历单选按钮(20 组,每组 3 个),并检查是否选中了每个组
- Jquery Ajax 和 Json:如何检查是否未定义
- jQuery或Javascript检查是否加载了图像
- Heroku+Backbone.js——如何检查是否在生产或开发中