JavaScript中的可选参数

时间:2013-10-24 17:06:01

标签: javascript object arguments

如果缺少剩余的参数,为什么这个函数不会抛出错误?

showStatistics("Mark Teixeira", "New York Yankees", "1st Base");

这是一个定义的函数:

function showStatistics(name, team, position, average, homeruns, rbi) {
  document.write("<p><strong>Name:</strong> " + arguments[0] + "<br />");
  document.write("<strong>Team:</strong> " + arguments[1] + "<br />");

  if (typeof arguments[2] === "string") {
    document.write("<strong>Position:</strong> " + position + "<br />"); 
  }
  if (typeof arguments[3] === "number") {
    document.write("<strong>Batting Average:</strong> " + average + "<br />");
  }
  if (typeof arguments[4] === "number") {
    document.write("<strong>Home Runs:</strong> " + homeruns + "<br />");
  }
  if (typeof arguments[5] === "number") {
    document.write("<strong>Runs Batted In:</strong> " + rbi + "</p>"); 
  }
}

3 个答案:

答案 0 :(得分:2)

任何未传递的参数在函数内显示为undefined。在JavaScript中没有方法重载。

答案 1 :(得分:1)

请记住,JS区域中的“数组”实际上是关联的。所以你作为索引区域放入的2,3,......实际上只是哈希键。您还可以检查参数的值[54876]。那不会失败,但回复你未定义。因此,即使您认为您的参数数组只有三个有效索引,而其他任何东西都提供了“索引越界”的内容,您实际上有三个有效的条目,并且使用任何其他键查找都不会失败,但是给你未定义。

答案 2 :(得分:1)

未传递值的参数被设置为undefined,这不是错误,除非您尝试使用undefined进行无法完成的操作。你唯一要做的就是检查typeof undefined ==='number',它只返回false,但不会抛出错误。