Javascript项目上为空错误。 (Null == 0 ?!)

时间:2019-02-09 07:13:23

标签: javascript

此处有2个选项:得分和错误。

我想要这个:

  • 如果answer.value为空>错误+1
  • 否则,得分+1。

但是它不起作用。

这里有一个问题; 4 * 0(答案是0,对吗?)

我没有在答案输入中写任何东西。因此,> answer.value == null

但是,结果是成绩+1。这不是我想要的。

我想,answer.value == 0就在这里。我该怎么办?

if (result == answer.value) {
  score.innerHTML = Number(score.innerHTML) + 1;
} else if (result != answer.value || answer.value == null) {
  wrong.innerHTML = Number(wrong.innerHTML) + 1;
}

完成JavaScript代码和html代码

//idleri alma
var sayi1, sayi2, islem, cevap, btn, dogru, yanlis;

sayi1 = document.getElementById("sayi1");
sayi2 = document.getElementById("sayi2");
islem = document.getElementById("islem");
cevap = document.getElementById("cevap");
btn = document.getElementById("btn");
dogru = document.getElementById("true");
yanlis = document.getElementById("false");

//random sayı oluşturma
function rSayi(ust, alt) {
  return Math.floor(Math.random() * (ust - alt)) + alt;
}

function soru() {
  sayi1.innerHTML = rSayi(5, 0);
  sayi2.innerHTML = rSayi(5, 0);
  //islem değişkeni üzerinde değişiklikler
  var islemler = ["+", "-", "/", "*"];
  islem.innerHTML = islemler[rSayi(4, 0)];
  //bölme geldiğinde tam bölünebilme özelliği
  if (islem.innerHTML == "/") {
    while (true) {
      if (sayi1.innerHTML % sayi2.innerHTML == 0) {
        break;
      }
      sayi2.innerHTML = rSayi(50, 0);
    }
  }
  //islem kontrolü
  var sonuc, s1, s2;
  s1 = Number(sayi1.innerHTML) // sayıları
  s2 = Number(sayi2.innerHTML) // number veri türüne geçiş yaptırıyoruz
  switch (islem.innerHTML) {
    case "+":
      sonuc = s1 + s2;
      break;
    case "-":
      sonuc = s1 - s2;
      break;
    case "*":
      sonuc = s1 * s2;
      break;
    case "/":
      sonuc = s1 / s2;
      break;
    default:
      break;
  }
  //dogru yanlis puanlarını arttırmak

  //HERE IS THE PROBLEM!!
  btn.onclick = function() {
    soru();
    var p1, p2;
    p1 = Number(dogru.innerHTML);
    p2 = Number(yanlis.innerHTML);
    if (sonuc == cevap.value) {
      dogru.innerHTML = p1 + 1;
      //dogru.innerHTML = Number(dogru.innerHTML)+1; !diğer yöntem
    } else if (sonuc != cevap.value || cevap.value == null) {
      yanlis.innerHTML = p2 + 1;
      //yanlis.innerHTML = Number(yanlis.innerHTML)+1; !diğer yöntem
    }
  }
}

//events
window.onload = function() {
  soru();
}
<html>

<head>
  <title>Calculator</title>
</head>

<body>
  <div id="main">
    <div id="sayi1">0</div>
    <div id="islem">+</div>
    <div id="sayi2">0</div>
    <div id="equal">=</div>
    <div id="_cevap"><input id="cevap"></div>
    <div id="_btn"><button id="btn">Cevapla</button></div>
    <div id="clear"></div>
    <div id="true">0</div>
    <div id="false">0</div>
  </div>
</body>

</html>

1 个答案:

答案 0 :(得分:2)

您的代码存在问题,Number('')0而不是null

因此,当<input >没有值时,答案被认为是0,它对于4 * 0是正确的

此外,请尽可能使用===来防止这种自动类型转换。

您可以做的是使逻辑短路,

if(cevap.value === '') // empty is always wrong
  yanlis.innerHTML = p2 + 1;
else {
  ... continue your code here
}

更新的代码

//idleri alma
var sayi1, sayi2, islem, cevap, btn, dogru, yanlis;

sayi1 = document.getElementById("sayi1");
sayi2 = document.getElementById("sayi2");
islem = document.getElementById("islem");
cevap = document.getElementById("cevap");
btn = document.getElementById("btn");
dogru = document.getElementById("true");
yanlis = document.getElementById("false");

//random sayı oluşturma
function rSayi(ust, alt) {
  return Math.floor(Math.random() * (ust - alt)) + alt;
}

function soru() {
  sayi1.innerHTML = rSayi(5, 0);
  sayi2.innerHTML = rSayi(5, 0);
  //islem değişkeni üzerinde değişiklikler
  var islemler = ["+", "-", "/", "*"];
  islem.innerHTML = islemler[rSayi(4, 0)];
  //bölme geldiğinde tam bölünebilme özelliği
  if (islem.innerHTML == "/") {
    while (true) {
      if (sayi1.innerHTML % sayi2.innerHTML == 0) {
        break;
      }
      sayi2.innerHTML = rSayi(50, 0);
    }
  }
  //islem kontrolü
  var sonuc, s1, s2;
  s1 = Number(sayi1.innerHTML) // sayıları
  s2 = Number(sayi2.innerHTML) // number veri türüne geçiş yaptırıyoruz
  switch (islem.innerHTML) {
    case "+":
      sonuc = s1 + s2;
      break;
    case "-":
      sonuc = s1 - s2;
      break;
    case "*":
      sonuc = s1 * s2;
      break;
    case "/":
      sonuc = s1 / s2;
      break;
    default:
      break;
  }
  //dogru yanlis puanlarını arttırmak

  //HERE IS THE PROBLEM!!
  btn.onclick = function() {
    soru();
    var p1, p2;
    p1 = Number(dogru.innerHTML);
    p2 = Number(yanlis.innerHTML);
    if(cevap.value === '') {
      yanlis.innerHTML = p2 + 1;
    } else if (sonuc == cevap.value) {
      dogru.innerHTML = p1 + 1;
      //dogru.innerHTML = Number(dogru.innerHTML)+1; !diğer yöntem
    } else if (sonuc != cevap.value) {
      yanlis.innerHTML = p2 + 1;
      //yanlis.innerHTML = Number(yanlis.innerHTML)+1; !diğer yöntem
    }
  }
}

//events
window.onload = function() {
  soru();
}
<html>

<head>
  <title>Calculator</title>
</head>

<body>
  <div id="main">
    <div id="sayi1">0</div>
    <div id="islem">+</div>
    <div id="sayi2">0</div>
    <div id="equal">=</div>
    <div id="_cevap"><input id="cevap"></div>
    <div id="_btn"><button id="btn">Cevapla</button></div>
    <div id="clear"></div>
    <div id="true">0</div>
    <div id="false">0</div>
  </div>
</body>

</html>