Bjo*_*now -1 javascript if-statement function
我正在创建一个功能,应该为经销商和玩家添加三张牌的总和.然后应该评估这些值,并且从函数返回的内容应该是推荐,"安全","停止","黑色插孔"或"被破坏".将有两种不同的功能来评估玩家的牌和经销商的牌.请查看我编写的代码.我想我已经把它想象成代码,我只有一个问题.
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;
}
Run Code Online (Sandbox Code Playgroud)
当我打印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;
};
Run Code Online (Sandbox Code Playgroud)
我不明白为什么结果会有差异?Ps,在后面的代码中我理解我不必将x和y作为变量,它们可以被删除.
提前致谢!
它们是有区别的:
var x = p1 + p2 + p3;
var ab = "player: " + player(x);
Run Code Online (Sandbox Code Playgroud)
您正在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;
}
Run Code Online (Sandbox Code Playgroud)
让我们说x = 2.当您尝试添加2 + undefined + undefinedJavaScript时将返回NaN(非数字),这就是变量summa将被设置为的内容.从该功能出来的唯一方法是现在通过"破坏",因为你的if-else的其他条件都没有得到满足(只有其他).
这可以通过以下方式解决:
var summa = (p1 + p2 + p3) || (p1 + p2) || p1;
Run Code Online (Sandbox Code Playgroud)
这基本上意味着您只添加传递给函数的参数,即存在的参数.