Javascript:不同的返回类型

Javascript: Different return types

本文关键字:返回类型 Javascript      更新时间:2023-09-26

我发现我可以从JavaScript中的同一个函数返回不同的类型。这种做法是习惯的还是应该被劝阻?

例如:

somefn = function(e) {
    switch (e.type) 
    {
       case 'mousedown':
         return false;
       case 'mousemove':
         return {x:10, y:20};
    }
 };

我不赞成。任何代码如果使用的函数可以根据上下文返回不同的类型,就必须检查返回值。

然而,在某些情况下它是有意义的。假设您有一个解析字符串(例如JSON)的函数。在这种情况下,如果输入字符串是表示数组的JSON字符串返回数组,如果输入包含对象,布尔值,数字等返回对象,返回数组就很有意义了。

一般来说,做最不会引起意外的事情。举个例子,你的例子会让我大吃一惊。

请注意,您的函数不仅返回不同的类型,甚至可能不返回任何内容:

somefn({type: 'foo'});  //undefined

虽然不鼓励上面描述的不一致的返回行为,但是返回不同的对象类型是常见的,尽管我不能说它是否习惯。

为了可读性和可维护性,我不建议返回完全不同的对象(比如您示例中的布尔和对象字面量),但是返回具有稍微甚至完全不同属性的对象字面量是非常常见的:

somefn = function(e) {
  switch (e.type) 
  {
    case 'mousedown':
      return {x:10, y:20, down: false};
    case 'mousemove':
      return {x:10, y:20};
    default:
      return {};
  }
};

在javascript中,一个函数返回不同类型的对象是很常见的,只需编写它,调用它并确定返回值的类型。