if 语句 - 我的第一个 IF 不起作用,但我的 else if 和 else 部分可以工作 javascript

if statement - My first IF doesn't work, but my else if and else parts work javascript

本文关键字:我的 if else javascript 工作 语句 第一个 IF 不起作用      更新时间:2023-09-26

我遇到了问题。我的第一个 IF 语句不起作用,但我的 ELSE IFELSE 语句确实有效,我不知道为什么

(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";
})();

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

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

我建议使用另一种比较,而不重复某些部分。

您从一个非常小的值(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");
})();

您使用的是字符串而不是数字。考虑如果值"7",则"7" > "6"为真,但"7" < "11"为假,因为字符串是逐个字符比较的。

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

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

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

我想你的其他 if 只能在非常特定的条件下工作,例如当前时间为"11",但如果当前时间为"6",这将适用于 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)进行比较。

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

Date.getHours() 给你一个整数值,应该这样用于你的目标,这非常有效:

<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>