Javascript:不同的返回类型
我发现我可以从JavaScript中的同一个函数返回不同的类型。这种做法是惯用的还是应该加以劝阻 例如:Javascript:不同的返回类型,javascript,Javascript,我发现我可以从JavaScript中的同一个函数返回不同的类型。这种做法是惯用的还是应该加以劝阻 例如: somefn = function(e) { switch (e.type) { case 'mousedown': return false; case 'mousemove': return {x:10, y:20}; } }; 一个函数在javascript中返回不同类型的对象是很常见的,只需
somefn = function(e) {
switch (e.type)
{
case 'mousedown':
return false;
case 'mousemove':
return {x:10, y:20};
}
};
一个函数在javascript中返回不同类型的对象是很常见的,只需编写它,调用它并确定返回值的类型。我不鼓励这样做。任何使用可以根据上下文返回不同类型的函数的代码都必须检查返回值 然而,在某些情况下,这是有意义的。假设您有一个解析字符串的函数,例如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 {};
}
};
这很奇怪,我更喜欢返回
null
,而不是创建一个空对象。如果我必须在{}
和false
之间进行选择,我会选择false
,因为至少我可以做一个简单的if(returnValue)
,这在你的代码中会更复杂。。。这实际上是返回不同对象的最佳位置(如false
,但更好的是null
),因为我可以通过返回值的布尔值检查是否成功,并在检查通过时将其用作对象。同意,但使用空对象文本可以安全地执行以下操作:if(somefn(e).down)
。我猜这是口味的问题:-)。顺便说一句,我真的希望if({})
在JavaScript中返回false
,两次接近的投票,两次向上的投票支持qn:-)。。我提到我对这种语言是新手,我所知道的所有其他语言都不允许使用它。它是惯用的,在某种意义上说它是“不禁止的”,因为“function”对象既没有输入类型也没有输出类型强制,留给程序员来决定。“return”语句可以返回任何类型的对象,包括函数,甚至什么都不返回。这在某些情况下可能很有用,例如,如果有匹配项,则返回字符串;如果没有匹配项,则返回false(例如,如果长度为零的字符串是有效匹配项),或者如果有答案,则返回数字;如果没有匹配项,则返回null(例如,X/Y,如果Y为零,则返回null)。