我在另一个函数中使用getFooBar(x, y)
,并希望根据条件执行foo()
或bar()
。如果它们都不是true
:什么都不做。
但JS并不喜欢这样。它总会返回一些东西,在这种情况下它是undefined
。
有可能阻止这种情况吗?
getFooBar(x, y) {
if (x > y) {
return foo();
}
if (y > x) {
return bar();
}
}
foo() {
// do stuff.
}
bar() {
// do some other stuff.
}
答案 0 :(得分:1)
如果你不想要undefined
,你需要确保你的函数无论如何被调用都会返回一些东西。
您需要测试参数是否存在。您可以通过检查内置的arguments
对象的length
属性来执行此操作。
您还应验证参数的类型是否正确(我假设您正在考虑数字)。
顺便说一句,你的逻辑没有指定x === y
时应该发生什么,所以除非你检查那个条件,否则函数不会返回任何内容然后当你尝试使用返回时价值,您将获得undefined
。
function getFooBar(x, y) {
// Make sure both arguments were passed
if(arguments.length === 2 && typeof x === "number" && typeof y === "number"){
if (x > y) {
return foo();
}
if (y > x) {
return bar();
}
} else {
// One or both arguments are missing.
// You can do whatever you like here.
// In this example, it will return a failure message,
// but, you could simply use return with no value.
return "invalid function call";
}
}
function foo() {
// do stuff.
return "foo";
}
function bar() {
// do some other stuff.
return "bar";
}
console.log(getFooBar());
console.log(getFooBar("Tuesday", "Purple"));
console.log(getFooBar(5,5)); // No condition tests for equal arguments, so no value is returned
// This time we'll check to see if there is a value to work with before assuming it's there:
var result = getFooBar(5,5);
if(result){
console.log(result);
} else {
console.log("getFooBar(5,5) doesn't return a value.");
}
console.log(getFooBar(5,10));
console.log(getFooBar(10,5));
答案 1 :(得分:0)
您可以添加空的return
语句,也可以返回虚假值,例如null
,0
,undefined
或任何您想要的内容。此外,即使它返回undefined,您仍然可以捕获返回的未定义值并对其执行某些操作,就像非返回函数一样。因此,您要么选择接受并使用undefined
返回值,要么写出您自己的返回值,无论何种类型。
getFooBar(x, y) {
if (x > y) {
return foo();
}
if (y > x) {
return bar();
}
return "foobar";
}
foo() {
// do stuff.
}
bar() {
// do some other stuff.
}