检查属性是否存在

同时

通常,如果我要检查是否obj.foo.bar退出,我将执行以下操作:

if(
    typeof obj != "undefined" &&
    typeof obj.foo !== "undefined" &&
    typeof obj.foo.bar !== "undefined"
 ){ action() } 

这是非常丑陋且重复的,可悲的是我不得不经常使用它。

我相信将没有可用的函数isDefined(),因为即使是空函数(function isDefined(){})也会在if(isDefined(obj.foo.bar)){action()}

那么,有什么聪明的方法来检查obj.foo.bar退出吗?

编辑:

  1. 使用字符串解析(或仅将变量作为string传递)的方法存在很大问题-因为可能正在使用minifier。
  2. typeof obj != "undefined"可以用代替obj这个解决方案仍然不能令我满意。

编辑2-解决方案:

这里所建议

var a = {
    b: {
        c: 'd'
    }
};

function isDefined(fn) {
    var value;
    try {
        value = fn();
    } catch (e) {
        value = undefined;
    } finally {
        return value !== undefined;
    }
};

// ES5
console.log(
    isDefined(function () { return a.b.c; }), //return true
    isDefined(function () { return a.b.c.d.e.f; }) //returns false
);
// ES6 using the arrow function
console.log(
    isset(() => a.b.c),
    isset(() => a.b.c.d.e.f)
);

我批准了@TJ Crowder的解决方案,而不是@somethinghere的解决方案,因为最后常规解决方案更短了,并且try catch语句有其他目的并且可能导致问题

TJ人群

您可以减少很多丑陋的事情,因为您不需要typeof大多数:

if (obj && obj.foo && typeof obj.foo.bar !== "undefined") {
    action();
}

如果 obj.foo.bar不能成为falsey值(0""NaNnullundefined,或false),你不需要做typeof的最后一个项目,之一:

if (obj && obj.foo && obj.foo.bar) {
    action();
}

如果您确实想要一个isDefined函数,则必须按照另一个问题及其答案中的概述进行字符串解析,但是如果您使用一个重命名(缩短)属性名称并且包含字符串解析功能的压缩程序,则可能会遇到问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查嵌套属性是否存在

来自分类Dev

检查是否存在多个属性

来自分类Dev

检查是否存在多个属性

来自分类Dev

通过属性名称检查属性是否存在

来自分类Dev

打字稿检查属性是否存在

来自分类Dev

JS检查深层对象属性是否存在

来自分类Dev

如何检查动态属性是否存在

来自分类Dev

检查Javascript对象中是否存在属性

来自分类Dev

检查是否存在对象属性

来自分类Dev

检查AppDelegate中的方法/属性是否存在

来自分类Dev

猫鼬findById检查属性是否存在

来自分类Dev

如何检查设置中是否存在属性?

来自分类Dev

尝试检查nuxt js是否存在属性

来自分类Dev

MongoDB检查属性是否存在(以及子属性)

来自分类Dev

检查属性是否存在DataTable.ExtendedProperties属性

来自分类Dev

检查属性是否存在并且在Python中是否正确

来自分类Dev

在运行时检查属性或方法是否存在?检查运行时是否存在 Trait?

来自分类Dev

检查属性是否存在而不抛出异常yii2

来自分类Dev

检查对象javascript中是否存在嵌套属性

来自分类Dev

PHP检查数组中是否存在具有属性的对象

来自分类Dev

检查CoreData中是否已经存在名称属性

来自分类Dev

检查属性是否存在和设置的最佳方法是什么?

来自分类Dev

如何稳健地检查Python属性是否存在?

来自分类Dev

ClojureScript检查js对象中是否存在属性

来自分类Dev

如何检查对象原型链中是否存在属性?

来自分类Dev

如何检查Gatling / Scala中是否存在属性

来自分类Dev

sparql检查是否存在某个属性,并将答案设为零

来自分类Dev

在Realm中运行线性迁移时检查属性是否存在

来自分类Dev

如何检查JS中的对象数组中是否存在属性

Related 相关文章

热门标签

归档