我已经多次看到 - 特别是在 jQuery 中 - 一个函数可以有多种有效数据类型,比方说字符串或函数。此外,在我自己的代码中,有时我的函数可以采用一个或多个值。所以我可以调用函数:
myFunc("arg"); or myFunc(["arg1", "arg2", ...]);
这看起来更灵活,打字也更方便,但这真的是好事吗?
因为另一方面,没有明确说明函数是什么类型,据我所知,JIT 编译器无法高效工作。并且通常必须进行某种类型的类型强制转换,这会带来额外的性能损失。
那么,即使数组中只有一个对象,总是写:myFunc(["arg"])
会更好吗?你对此有何看法?
最佳答案
JavaScript 是松散类型的。如果您不小心,这可能会伤害您,但它也提供了极大的灵 active 来精确地执行此操作。我经常利用这种行为;在函数中,您通常希望具有如下结构:
var func = function(someArg) {
var data;
switch (typeof someArg) {
case 'string':
// transform someArg into data
// example: pass it as a jquery selector to get a jquery object
break;
case 'object':
// transform someArg into data
break;
...
default:
throw new Error('Invalid argument type passed to func!');
}
// rest of function that expects data to be a certain type
};
您的函数将变得更加灵活且更易于使用,但代价是变得更加复杂。以复杂性换取灵 active 是否值得将因情况(以及因人而异)而异。
编辑:小心 Array
:typeof someArray
将给出 "object"
,您需要改用它:someArray instanceof Array
http://jsfiddle.net/8ycFb/
关于允许具有多种数据类型的 Javascript 参数 : good practice or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197152/