2

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

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>"); 
  }
}
4

3 回答 3

2

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

于 2013-10-24T17:08:04.197 回答
1

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

于 2013-10-24T17:18:06.737 回答
1

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

于 2013-10-24T17:21:43.183 回答