我的第一个IF不起作用,但我的其他if和else部分工作javascript

时间:2016-07-06 09:06:47

标签: javascript if-statement statements

我遇到了问题。我的第一个 IF 语句不起作用,但我的 ELSE IF 和我的 ELSE 语句确实有效,我无法弄清楚原因。

(function(){
    var dateHeure = new Date().getHours();
    var dateHeure = dateHeure.toString();
    var $p = document.querySelectorAll('.change')[0];

    console.log($texte);

    if (dateHeure >= "6" && dateHeure < "11"){
      $texte = "Good morning";
    }
    else if (dateHeure >= "11" && dateHeure < "14"){
      $texte = "Enjoy your meal";
    }
    else if (dateHeure >= "14" && dateHeure < "18"){
      $texte = "Good afternoon";
    }
    else if (dateHeure >= "18" && dateHeure < "22"){
     $texte = "Good evening";
    }
    else {
      $texte = "Good night";
    }
    $p.innerHTML=$texte + ", World";
})();

编辑:

这是适合我的代码。我确实喜欢你们所说的,我不再把时间变成字符串了,现在没关系了:

(function(){
var dateHeure = new Date().getHours();
var dateHeure = dateHeure.toString();
var $p = document.querySelectorAll('.change')[0];
var $texte = "";


if (dateHeure >= 6 && dateHeure < 11){
  $texte = "Good morning";
}
else if (dateHeure >= 11 && dateHeure < 14){
  $texte = "Enjoy your meal";
}
else if (dateHeure >= 14 && dateHeure < 18){
  $texte = "Good afternoon";
}
else if (dateHeure >= 18 && dateHeure < 22){
  $texte = "Good evening";
}
else {
  $texte = "Good night";
}
$p.innerHTML=$texte + ", World";
})();

4 个答案:

答案 0 :(得分:1)

虽然你已经知道,问题是什么,

  

为什么要将数字转换为字符串,如果需要数字进行比较?

我建议使用不同类型的比较而不重复某些部分。

您以非常小的值(6点钟之前)开始比较,然后上升到当天结束。你现在只需要检查更小的。不需要进行更多或相同的检查。

(function () {
    var dateHeure = new Date().getHours(),
        texte;

    if (dateHeure < 6) {
        texte = "Good night";
    } else if (dateHeure < 11) {
        texte = "Good morning";
    } else if (dateHeure < 14) {
        texte = "Enjoy your meal";
    } else if (dateHeure < 18) {
        texte = "Good afternoon";
    } else if (dateHeure < 22) {
        texte = "Good evening";
    } else {
        texte = "Good night";
    }
    console.log(texte + ", World");
})();

答案 1 :(得分:0)

您正在使用字符串而不是数字。考虑值是"7",然后"7" > "6"为真,但"7" < "11"为假,因为字符串是逐字符比较的。

只需删除行var dateHeure = dateHeure.toString();并更改所有比较以使用数字,然后代码应该按预期工作。

答案 2 :(得分:0)

问题在于您将整数转换为字符串,然后尝试针对范围检查该字符串,但在这种情况下没有可比较的范围。

执行一系列字符串的唯一方法是将字符串存储在数组或类似字符串中,然后将当前字符串(您的时间)与每个条目进行比较。但是我建议不要这样做,因为这似乎是一种长期的方式来获得你想要的东西。

如果我认为你的其他人只能在非常具体的条件下工作,例如当前时间&#34; 11&#34;但如果当前时间是&#34; 6&#34;这将适用于if语句。但是else会工作,因为它是在所有if语句都失败的情况下执行的(在大多数情况下会这样)。但是,如果你想让它工作,我建议像这样使用它:

(function(){
var dateHeure = new Date().getHours();
var $p = document.querySelectorAll('.change')[0];

console.log($texte);

if (dateHeure >= 6 && dateHeure < 11){
  $texte = "Good morning";
}
else if (dateHeure >= 11 && dateHeure < 14){
  $texte = "Enjoy your meal";
}
else if (dateHeure >= 14 && dateHeure < 18){
  $texte = "Good afternoon";
}
else if (dateHeure >= 18 && dateHeure < 22){
  $texte = "Good evening";
}
else {
  $texte = "Good night";
}
$p.innerHTML=$texte + ", World";
})();

这里我从日期开始计算小时数,但不是将其转换为字符串,而是将其与整数值范围(例如大于或等于6且小于11)进行比较。

答案 3 :(得分:0)

您正在对要作为数字进行比较的值执行字符串比较。这是一个等待发生的事故(正如你所发现的那样)。

Date.getHours()为您提供了一个Integer值,并且应该用于您的目标,这非常有效:

<p class="change"></p>
<script>
var $texte;
(function(){
var dateHeure = new Date().getHours();
//dateHeure = 10; // for testing
//dateHeure = dateHeure.toString(); // don't !
var $p = document.querySelectorAll('.change')[0];

console.log($texte);

if (     dateHeure <  6
      || dateHeure >=22) { $texte = "Good night"; }
else if (dateHeure < 11) { $texte = "Good morning"; }
else if (dateHeure < 14) { $texte = "Enjoy your meal"; }
else if (dateHeure < 18) { $texte = "Good afternoon"; }
else                     { $texte = "Good evening"; }

$p.innerHTML=$texte + ", World";
})();
</script>