我正在编写一个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
});
有关如何改进此代码的任何建议。
答案 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);