我经常看到 - 特别是在jQuery中 - 一个函数可以有多个有效的数据类型,比如一个字符串或一个函数。另外,在我自己的代码中,我有时会有一些函数可以使用一个或几个值。所以我可以用以下函数调用该函数:
myFunc("arg"); or myFunc(["arg1", "arg2", ...]);
这似乎更灵活,也更方便打字,但这实际上是一件好事吗?
因为另一方面,没有明确说明函数的类型,而AFAIK则JIT编译器无法有效地工作。并且通常必须存在某种类型的类型强制,这可能会带来额外的性能损失。
那么,即使在数组中只有一个对象,始终写:myFunc(["arg"])
会更好吗?你对此有何看法?
答案 0 :(得分:2)
JavaScript的输入类型很松散。如果你不小心,这可能会让你感到害怕,但它也提供了很大的灵活性来完成这样的事情。我经常利用这种行为;在函数中,你通常希望有这样的结构:
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
};
您的功能将变得更加灵活,更容易消费,但代价是变得更加复杂。灵活性的复杂性交换是否值得,因情况而异(以及人与人之间)。
修改:谨慎使用Array
:typeof someArray
会提供"object"
,您需要使用此代码:someArray instanceof Array
http://jsfiddle.net/8ycFb/