为函数接受2个参数且仅给出一个参数时设置默认参数-Javascript

时间:2019-06-05 23:55:05

标签: javascript if-statement arguments

当第一个或第二个可选参数未定义时,我试图创建一些if语句来捕获。

但是,当仅输入一个参数时,它仍会将该参数值分配给 first 参数。即

function dogBreeder (name, age) {
    if (name === undefined) {
      name = "Steve";
    }
    if (age === undefined) {
      age = 0;
    }
    let newObject = {};
    newObject.name = name;
    newObject.age = age;
    return newObject;
}

console.log(dogBreeder(23));

但是我们当然希望它记录: 改为{ name: Steve, age: 23 }

当只给出一个自变量且该自变量为数字时,我不知道如何强制将名称等于“ Steve”。

我也尝试过:

function dogBreeder (name, age) {
    if (typeof(name) === "number") {
        name = "Steve";
    }
    if (name === undefined) {
      name = "Steve";
    }
    if (age === undefined) {
      age = 0;
    }
    let newObject = {};
    newObject.name = name;
    newObject.age = age;
    return newObject;
}

console.log(dogBreeder(0));

1 个答案:

答案 0 :(得分:2)

传递一个对象而不是多个单个参数可能会更容易-然后,您可以使用默认属性值:

function dogBreeder({ name = 'Steve', age = 0 }) {
  const newObject = { name, age };
  // manipulate newObject here if needed
  return newObject;
}

console.log(dogBreeder({ age:  23 }));

要更改原始代码,可以使用rest参数和类型正确的.find参数(IMO,尽管这很丑陋且不太容易使用):

function dogBreeder (...args) {
  const name = args.find(arg => typeof arg === 'string') || 'Steve';
  const age = args.find(arg => typeof arg === 'number') || 0;
  const newObject = { name, age };
  return newObject;
}

console.log(dogBreeder(23));