2011-05-01 100 views
7

我看到我可以从JavaScript中的相同函数返回不同的类型。这种做法是习惯性的还是应该泄气?Javascript:不同的返回类型

例如:

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

2关闭投票,并为qn提出两个投票:-) ..我提到我是新来的语言,我知道的所有其他语言不会允许它.. – bsr 2011-05-01 15:38:58

回答

3

请注意,不只是你的函数返回类型不同,但即使可能不会返回任何东西:

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 {}; 
    } 
}; 
+2

这很奇怪,我宁愿返回'null'而不是创建一个空对象。如果我不得不在'{}'和'false'之间进行选择,那么我会用'false'去做,因为至少我可以做一个简单的'if(returnValue)',这会在你的代码中更加复杂......实际上是返回一个*不同*对象的最佳位置(比如'false',但是更好的'null'),因为我可以通过返回值的布尔值检查一般成功,并且在检查通过时将其用作对象。 – davin 2011-05-01 15:31:22

+0

同意,但对于空对象字面值,您可以安全地执行如下操作:'if(somefn(e).down)'。猜猜这是一个品味问题:-)。顺便说一句,我真的很喜欢'if({})'在JavaScript中返回'false' ... – 2011-05-01 15:34:07

3

这是很常见的一个函数返回不同类型的对象以JavaScript,只写它,调用它,并且确定返回值的类型。

3

我会劝阻它。任何使用可根据上下文返回不同类型的函数的代码都必须检查返回的值。

但是,有些情况下它是有意义的。假设你有一个解析字符串的函数,例如JSON。在这种情况下,如果输入字符串是表示数组的JSON字符串,对象是输入包含对象,布尔值,数字等,则返回数组意义重大。

一般来说,do这会导致最少的惊喜。例如,你的例子会让我感到惊讶。