无论我传入什么字符串,if语句总是为真

Siu*_*ami 1 javascript string

我只是在学习javascript.我正在尝试创建一个简单的小费计算器,根据用户对服务质量的描述来更改小费金额.

我为参数service发送一个字符串,并想检查它是否等于每个提示量的任何值.如果是这样,我试图根据该值计算提示.

但是,在测试多个值之后,似乎我的函数在任何值的第一个if语句中都是真的.我没看到什么?

/* Create an array of possible descriptions of service*/

function tip (cost, service) {
  if (service == "good" || "" || "nice"){
    return cost + cost * .10;
  }else if (service == "bad" || "horrible"){
    return cost + cost * .5;
  }else if (service == "excellent" || "great"){
    return cost + cost * .15;
  }else{
    console.log("How was the service?");
  }
}

console.log(tip(65, "great"));
Run Code Online (Sandbox Code Playgroud)

Dav*_*hta 5

这是因为你已经做到了,|| '' || 'nice'并且这个陈述将永远是正确的。您需要像这样重写您的声明:

if (service == "good" || service == "" || service == "nice")
Run Code Online (Sandbox Code Playgroud)

并且您必须对所有陈述执行此操作:

function tip (cost, service) {
  if (service == "good" || "" || "nice"){
    return cost + cost * .10;
  }else if (service == "bad" || service == "horrible"){
    return cost + cost * .5;
  }else if (service == "excellent" || service == "great"){
    return cost + cost * .15;
  }else{
    console.log("How was the service?");
  }
}

console.log(tip(65, "great"));
Run Code Online (Sandbox Code Playgroud)


m0m*_*eni 5

"或" ||存在是为了您的方便,因为它阻止您编写额外的if语句.没有||你的第一个声明就会写成

if (service == "good") 
    return cost + cost * .10;
if ("")
    return cost + cost * .10;
if ("nice")
    return cost + cost * .10;
Run Code Online (Sandbox Code Playgroud)

当它写成这样的时候你可以看到它不是你的意思.

if("")永远是假的,if("nice")永远是真的,所以永远不会满足你的其他条件.

每次编写条件语句时,都需要在每个语句之间编写,||就像它是一个单独的if语句一样.在这种情况下,您省略了变量的名称,而不是

if (service == "good" || "" || "nice"){
Run Code Online (Sandbox Code Playgroud)

你应该有

if (service == "good" || service == "" || service == "nice"){
Run Code Online (Sandbox Code Playgroud)

另外要注意的是,在Javascript中它几乎总是一个更好的主意,用=====.这是因为==在尝试比较值之前会做一些称为类型强制的时髦的东西,但===会比较这两个值,因为它们是彻头彻尾的.

所以你最后的陈述应该是

if (service === "good" || service === "" || service === "nice"){
Run Code Online (Sandbox Code Playgroud)

将同样的意识形态应用于其他所有陈述,您将得到:

function tip (cost, service) {
  if (service === "good" || service === "" || service === "nice"){
    return cost + cost * .10;
  }else if (service === "bad" || service === "horrible"){
    return cost + cost * .5;
  }else if (service === "excellent" || service === "great"){
    return cost + cost * .15;
  }else{
    console.log("How was the service?");
  }
}
Run Code Online (Sandbox Code Playgroud)