javascript条件不会转到第二个语句

时间:2017-05-30 00:04:07

标签: javascript

我刚刚学习了javascript的基础知识,所以我正在开发一个获得信用卡号的练习项目,它会告诉你它是否有效以及它是什么类型的卡。我遇到的问题是当函数中传递卡号的数组时,它只检查第一个if语句,即mastercard。我不确定为什么它不会进入第二个if语句。这是我的代码:

let cardType;

function getCreditCardNum(num) {
  let cardTypeAmexMasterCard = num.slice(0,2);

  if(cardTypeAmexMasterCard >= 51 || cardTypeAmexMasterCard <= 55) {
    cardType = "MasterCard";
  }
  else if(cardTypeAmexMasterCard == 34 || cardTypeAmexMasterCard == 37) {
    cardType = "American Express";
  }
  else {
    cardType = "INVALID CARD TYPE"
  }
  console.log(`Card Type is ${cardType}`);
}

let cardArray = [344234324];
getCreditCardNum(cardArray);

//安慰万事达卡而非美国快递

4 个答案:

答案 0 :(得分:1)

一些错误,

  • .slice()需要Array或String(在您的特定情况下)。比你需要的还要Number
  • 您已将整个数组传递到函数getCreditCardNum(cardArray);,而应该查找[0]
  • 检查范围时使用&&

&#13;
&#13;
function getCreditCardNum(num) {

  let nn =  Number( num.toString().slice(0,2) );
  
  if(nn >= 51 && nn <= 55) {
    cardType = "MasterCard";
  }
  else if(nn == 34 || nn == 37) {
    cardType = "American Express";
  }
  else {
    cardType = "INVALID CARD TYPE"
  }
  console.log(`Card Type is ${cardType}`);
}

let cardArray = [344234324];
getCreditCardNum( cardArray[0] );
&#13;
&#13;
&#13;

我是如何做到的:

&#13;
&#13;
function getCreditCardType( val ) { // we're returning a TYPE so getCreditCardType

  const num =  +val.substr(0,2);  // Use substr. Use const, value will not change.
  let type = "INVALID CARD TYPE"; // Yep. It's invalid :D

  if(num >= 51 && num <= 55) {
    type = "MasterCard";
  } else if(num === 34 || num === 37) { // No need to typechecking. Use ===
    type = "American Express";
  }
  
  return type; // Return the needed response
  
}

let cardNumber = "344234324"; // No array; use string, since inputs values give us strings anyways.
const cardType   = getCreditCardType( cardNumber );
// test HERE instead
console.log(`Card Type: ${cardType}`);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你的函数可能导致问题的原因是,一旦if语句为'true',它只运行该块中的代码。

因此,如果第一个if块为'true',那么您将不会运行其他检查。除此之外,如果前两个数字小于55 cardTypeAmexMasterCard <= 55,则您的第一个语句将为true。如果数字大于51,它也将返回true,因此只要传入一个数字,它将始终返回true,并且“if else”语句的其余部分将不会运行。

您的第一个if语句需要执行AND检查

if(cardTypeAmexMasterCard >= 51 && cardTypeAmexMasterCard <= 55)

这将阻止它始终返回true。

您的代码的另一个问题是它没有传递正确的2位数字,您只在一个只有一个元素的数组上执行slice(0,2) - 这将始终返回整个元素。

尝试接受号码

let cardArray = 344234324;
getCreditCardNum(cardArray);

// then change this
let cardTypeAmexMasterCard = parseInt(num.toString().slice(0,2), 10);

这将为您提供一个2位数的数字。

答案 2 :(得分:0)

参数num只包含一个值。控制台日志cardTypeAmexMasterCard,你会看到我在说什么。并且你的if语句也应该是和&amp;&amp;。

之类的陈述

答案 3 :(得分:-2)

以下是您的一个问题:

if(cardTypeAmexMasterCard >= 51 || cardTypeAmexMasterCard <= 55) {
    cardType = "MasterCard";
}

你应该在你的陈述中使用AND而不是OR。