使用if / else语句的函数

时间:2015-04-15 08:20:17

标签: javascript function if-statement

我正在创建一个功能,应该为经销商和玩家添加三张牌的总和。然后应该评估这些值,并且从函数返回的内容应该是推荐,“安全”,“停止”,“黑色插孔”或“被破坏”。将有两种不同的功能来评估玩家的牌和经销商的牌。请查看我编写的代码。我想我已经把它想象成代码,我只有一个问题。

function printResult(p1, p2, p3, d1, d2, d3) {
  var x = p1 + p2 + p3; 
  var ab = "player:" + " " + player(x);
  var y = d1 + d2 + d3;
  var de = "dealer:" + " " + dealer(y);
  return ab + ", " + de;
 };

function player(p1, p2, p3) {
  var summa = p1 + p2 + p3
  var result;
  if (summa < 21)
  result = "safe";
  else if (summa = 21)
    result = "black jack";
  else
    result = "busted";

  return result;
}

function dealer(d1, d2, d3) {
  var summa = d1 + d2 + d3;
  var dealer;
  if (summa < 17)
  dealer =  "safe";
else if (summa >= 17 && summa <= 20)
  dealer = "stop";
else if (summa == 21)
  dealer = "black jack";
else 
  dealer = "busted";

return dealer; 
}

当我打印printResult(4,8,1,3,8,4)时,它给了我一个错误的推荐(玩家在它应该安全时被破坏)。

但是,如果我将代码更改为以下内容,那么它可以正常工作。

function printResult(p1, p2, p3, d1, d2, d3) {
  var x = p1 + p2 + p3; 
  var ab = "player:" + " " + player(p1, p2, p3);
  var y = d1 + d2 + d3;
  var de = "dealer:" + " " + dealer(d1, d2, d3);
  return ab + ", " + de;
 };

我不明白为什么结果会有差异? Ps,在后面的代码中我理解我不必将x和y作为变量,它们可以被删除。

提前致谢!

2 个答案:

答案 0 :(得分:5)

有区别:

var x = p1 + p2 + p3; 
var ab = "player: " + player(x);

您使用一个参数player来调用x,其中包含变量的总和。这是有效的代码,但其他参数现在为undefined。为了说明,您的功能实际上看起来像:

function player(p1, p2, p3) {
  var summa = p1 + p2 + p3 //p1 is x, p2 is undefined, p3 is undefined
  ...
  else
    result = "busted";
  return result;
}

让我们说x = 2。当您尝试添加2 + undefined + undefined时,JavaScript将返回NaN(非数字),这就是变量summa将设置为的内容。现在唯一的出路就是通过“被破坏”,因为你的if-else的其他条件都没有达到(只有其他)。

这可以通过以下方式解决:

var summa = (p1 + p2 + p3) || (p1 + p2) || p1;

这基本上意味着您只添加传递给函数的参数,即存在的参数。

答案 1 :(得分:3)

Javascript允许您不指定d2&amp; d3函数的player参数,但如果它们不存在,则其值undefinedx + undefined + undefinedNaN(非数字的特殊值) )

如果您想允许两种方式调用您的函数,您可以在顶部添加一个将undefined转换为0的检查:

function player(p1, p2, p3) {
  p1 = p1 || 0;
  p2 = p2 || 0;
  p3 = p3 || 0;
  var summa = p1 + p2 + p3
  var result;
  if (summa < 21)
  result = "safe";
  else if (summa = 21)
    result = "black jack";
  else
    result = "busted";

  return result;
}

这种语法有效,因为undefined是'falsey'所以将使用0的值,0也是'falsey',但它并不重要,因为它将被0替换,所有其他值将保持为他们是'真实的'