在JavaScript中处理可选返回值的最佳方法是什么?
我试图用JavaScript编写一个返回值或false的函数。是否存在类似Scala中的某种“选项”返回类型?例如,在Scala中:在JavaScript中处理可选返回值的最佳方法是什么?,javascript,functional-programming,optional,Javascript,Functional Programming,Optional,我试图用JavaScript编写一个返回值或false的函数。是否存在类似Scala中的某种“选项”返回类型?例如,在Scala中: def foo(): Option[T]() 在JavaScript中,我能找到的唯一方法是通过不同的返回值,例如: function foo() { if (x) { return "value"; } else { return false; } } 这是习惯用语还是有更好的方法?不,没有。认为JS是“弱类型”。 通常在这种情况
def foo(): Option[T]()
在JavaScript中,我能找到的唯一方法是通过不同的返回值,例如:
function foo() {
if (x) {
return "value";
} else {
return false;
}
}
这是习惯用语还是有更好的方法?不,没有。认为JS是“弱类型”。 通常在这种情况下,您要么返回
null
要么返回undefined
。
对于返回对象类型的函数,通常是第一个,例如在DOM API中:
let node = document.getElementById("foo");
if (node) {
// do something
}
如果id为foo
的节点不存在,node
将为null
。该检查之所以有效,是因为null
是falsy
值
在您的示例中,如果返回一个字符串,最好的方法可能是要么返回一个空字符串,也就是“falsy”,要么未定义
但是没有什么能比得上选项
是Scala或Rust。不,没有。认为JS是“弱类型”。
通常在这种情况下,您要么返回null
要么返回undefined
。
对于返回对象类型的函数,通常是第一个,例如在DOM API中:
let node = document.getElementById("foo");
if (node) {
// do something
}
如果id为foo
的节点不存在,node
将为null
。该检查之所以有效,是因为null
是falsy
值
在您的示例中,如果返回一个字符串,最好的方法可能是要么返回一个空字符串,也就是“falsy”,要么未定义
但是没有什么比选项更像是Scala或Rust。Javascript不附带带标签的联合。但是,您可以自己轻松地实现它们:
const union=type=>(标记,o)=>
(o[type]=type,o.tag=tag.name | | tag,o);
常数匹配=(tx,o)=>
o[tx.tag](tx);
常量选项=联合(“选项”);
const None=选项(“None”,{});
constsome=Some=>选项(Some,{Some});
常数头=xs=>
xs.length==0
? 没有一个
:一些(xs[0]);
常数xs=[11,22,33],
ys=[];
const foo=匹配(头部(xs){
无:()=>0,
Some:({Some})=>Some
});
常数条=匹配(头部(ys){
无:()=>0,
Some:({Some})=>Some
});
console.log(foo,bar);
Javascript不附带带标记的联合。但是,您可以自己轻松地实现它们:
const union=type=>(标记,o)=>
(o[type]=type,o.tag=tag.name | | tag,o);
常数匹配=(tx,o)=>
o[tx.tag](tx);
常量选项=联合(“选项”);
const None=选项(“None”,{});
constsome=Some=>选项(Some,{Some});
常数头=xs=>
xs.length==0
? 没有一个
:一些(xs[0]);
常数xs=[11,22,33],
ys=[];
const foo=匹配(头部(xs){
无:()=>0,
Some:({Some})=>Some
});
常数条=匹配(头部(ys){
无:()=>0,
Some:({Some})=>Some
});
console.log(foo,bar);
JavaScript中的函数返回一个值,基本上就是这样。null是您需要的。其他语言中的null类似于JS中的undefined,JS中的null更像optional(尽管不能将其视为monad),也没有内置的选项类型包装器,但如果您喜欢Scala之类的类型检查语言,您可能需要查看TypeScript而不是Javascript。Javascript中的函数返回一个值,基本上就是这样。null就是你需要的。其他语言中的null类似于JS中的undefined,JS中的null更像是可选的(尽管您不能将其视为monad)也没有内置的选项类型包装器,但是如果您喜欢Scala之类的类型检查语言,您可能需要查看TypeScript而不是Javascript。