如何检查用户提供的参数中是否设置了对象属性?

时间:2014-04-27 12:32:32

标签: javascript underscore.js

我有一个方法,它将一个对象作为参数,并且需要所有预期的属性,否则我想抛出一个错误。这是做这件事的最佳做法。可以使用Underscore _.map或类似的东西轻松完成吗?

按需要"我的意思是nullundefined

4 个答案:

答案 0 :(得分:1)

您可以使用_.intersectionObject.keys

function yourFunc(args) {
    if(_.intersection(["name", "secondName", "age"], Object.keys(args)).length != 3) {
        throw Error("Check your arguments: something is missing!");
    }
}

请注意,如果参数未从原型中即时显示,则此类检查将起作用。 From Mozilla Development network

  

Object.keys()方法返回给定对象自己的数组   可枚举的属性,与a提供的顺序相同   for ... in循环(不同之处在于for-in循环枚举   原型链中的属性也是如此。

答案 1 :(得分:1)

只需使用标准的JavaScript array .some()方法,就可以在没有库的情况下执行此操作:

function yourFunction(params) {
   if (params == null || typeof params != "object") {
      throw "Missing parameters - 'params' must be an object";
   } else if (["rp1", "rp2", "etc"].some(function(p) { return !(p in params); })) {
      throw "Missing parameter";
   }

   // if we got this far the parameters were all supplied
};

...数组中的值("rp1"等)是所需参数的名称。

如果您想支持IE9之前的版本,那么您可以使用任何Underscore的等效方法。

答案 2 :(得分:0)

您可以使用Object.keys(your_object)获取所有媒体资源。这将生成一个对象键数组。

答案 3 :(得分:0)

var requiredKeys = [....];

function isCorrectObject(obj, testForTruthy) {
  return _(requiredKeys).every(function(key) {
    return obj[key] || (!testForTruthy && _(obj).has(key));
  });
}