我看到我可以在JavaScript中从同一个函数返回不同的类型。这种做法是惯用还是不鼓励?
例如:
somefn = function(e) {
switch (e.type)
{
case 'mousedown':
return false;
case 'mousemove':
return {x:10, y:20};
}
};
答案 0 :(得分:4)
我会劝阻它。任何使用可根据上下文返回不同类型的函数的代码都必须检查返回的值。
然而,有些情况下它才有意义。假设您有一个解析字符串的函数,例如JSON。在这种情况下,如果输入字符串是表示数组的JSON字符串,如果输入包含对象,布尔值,数字等对象,则返回数组非常有意义。
一般来说,做那些会造成最小惊喜的事情。例如,你的例子会给我很多惊喜。
答案 1 :(得分:3)
一个函数在javascript中返回不同类型的对象是非常常见的,只需编写它,调用它并确定返回值的类型。
答案 2 :(得分:3)
请注意,不仅您的函数返回不同的类型,甚至可能不返回任何内容:
somefn({type: 'foo'}); //undefined
虽然不鼓励上述不一致的返回行为,但返回不同的对象类型很常见,但我不能说它是否是惯用的。
为了便于阅读和维护,我不建议返回完全不同的对象(例如你的例子中的boolean和object literal),但返回具有略微甚至完全不同属性的对象文字是很常见的:
somefn = function(e) {
switch (e.type)
{
case 'mousedown':
return {x:10, y:20, down: false};
case 'mousemove':
return {x:10, y:20};
default:
return {};
}
};