每次缺少功能参数时检查未定义

时间:2012-11-21 10:02:34

标签: javascript undefined

我正在编写一个js代码片段来创建一个可以使用object literal调用的函数。

问题区域:如果我不需要跟踪产品值,则会进行未定义的检查。但我真的需要检查每个&每个值,如果它不在对象文字中。 下面是代码。

trackProduct = function (args) {

      if(args.label == undefined) {
        value.push([args.category, args.action, args.value]);
      } else if(args.value == undefined){
        value.push([args.category, args.action, args.label]);
      } else {
        value.push([args.category, args.action, args.label, args.value]);
      }
};

通过下面的对象文字调用此函数。我还没有传递value参数。我们是否需要为所有三个参数检查Undefined?

trackProduct({
    category: elemcategory,
    action: elemaction,
    label: elemlabel
});

有关如何改进此代码的任何建议。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下内容:

trackProduct = function (args) {
    var tempArray = [];

    args.category && tempArray.push(args.category);
    args.action && tempArray.push(args.action);
    args.label && tempArray.push(args.label);
    args.value && tempArray.push(args.value);

    value.push(tempArray); // [["elemcategory", "elemaction", "elemlabel"]]
};

同样正如@jisi指出的那样,如果其中任何一个都能保持0,等等的虚假值,那么这个简单的条件就不会成立。在这种情况下,应使用typeof(args.category) === 'undefined'

除非你对可更新性感到满意,否则即使我提出建议也是如此,并确保那些想要阅读代码的人会理解这一点。

以上示例说明了处理未定义的值。


可以通过for in

来完成迭代对象
var tempArray = [];
for (var prop in args) tempArray.push(args[prop]);
value.push(tempArray);