javascript - 未定义,它不计数,不工作为什么

标签 javascript

我编写了一个脚本来计算从我们的生日算起已经过去了多少天,但是当它显示它说未定义时,我不知道为什么,我没有看到问题,也许你可以帮助我。

    var dzien = prompt("Podaj dzień urodzin: ");
    var miesiac = prompt("Podaj miesiąc urodzin: ");
    var rok = prompt("Podaj rok urodzin: ");

    var data = new Date();  //Funkcja w js
    var today = data.getDate();  //Pobranie dnia (numer 1->31)
    var month = data.getMonth() + 1;  //Pobranie miesiąca, w js 0-11 -> dlatego jest +1

        var finalR = 0;
    if ( month == 1 ) {
        var finalR = styczen.iledni/1 + today/1;
    } else if ( month == 2) {
        var finalR = luty.iledni/1 + today/1;
    } else if ( month == 3) {
        var finalR = marzec.iledni/1 + today/1;
    } else if ( month == 4) {
        var finalR = kwiecien.iledni/1 + today/1;
    } else if ( month == 5) {
        var finalR = maj.iledni/1 + today/1;
    } else if ( month == 6) {
        var finalR = czerwiec.iledni/1 + today/1;
    } else if ( month == 7) {
        var finalR = lipiec.iledni/1 + today/1;
    } else if ( month == 8) {
        var finalR = sierpien.iledni/1 + today/1;
    } else if ( month == 9) {
        var finalR = wrzesien.iledni/1 + today/1;
    } else if ( month == 10) {
        var finalR = pazdziernik.iledni/1 + today/1;
    } else if ( month == 11) {
        var finalR = listopad.iledni/1 + today/1;
    } else if ( month == 12) {
        var finalR = grudzien.iledni/1 + today/1;
    }

    if (dzien > 31 || miesiac > 12 || rok > 2016 || dzien <= 0 || miesiac <= 0 || rok <= 0) {
        if(dzien > 31 || dzien <= 0){
            alert("Nie ma takiego dnia miesiąca! Podaj jeszcze raz.");
            var dzien = prompt("Podaj dzień: ");
        }
        if(miesiac > 12 || miesiac <= 0){
            alert("Nie ma takiego miesiąca! Podaj jeszcze raz.");
            var miesiac = prompt("Podaj miesiąc: ");            
        }
        if(rok > 2016 || rok <= 0){
            alert("Kłamiesz! Podaj prawdziwy rok urodzenia.");
            var rok = prompt("Podaj rok: ");
        }
    }
    if (isNaN(dzien) || isNaN(rok)) {
        if (isNaN(dzien)){
            alert('Musisz wpisać liczbę!');
            var dzien = prompt("Podaj dzień: ");
        }
        if (isNaN(rok)){
            alert('Musisz wpisać liczbę!');
            var rok = prompt("Podaj rok: ");
        }
    }

    var styczen      = {  nazwa: "Styczeń",      iloscDni: 31, ilezostalo: 335, iledni:  0    };
    var luty         = {  nazwa: "Luty",         iloscDni: 29, ilezostalo: 306, iledni:  31   };
    var marzec       = {  nazwa: "Marzec",       iloscDni: 31, ilezostalo: 275, iledni:  60   };
    var kwiecien     = {  nazwa: "Kwiecień",     iloscDni: 30, ilezostalo: 245, iledni:  91   };
    var maj          = {  nazwa: "Maj",          iloscDni: 31, ilezostalo: 214, iledni:  121  };
    var czerwiec     = {  nazwa: "Czerwiec",     iloscDni: 30, ilezostalo: 184, iledni:  152  };
    var lipiec       = {  nazwa: "Lipiec",       iloscDni: 31, ilezostalo: 153, iledni:  182  };
    var sierpien     = {  nazwa: "Sierpień",     iloscDni: 31, ilezostalo: 122, iledni:  213  };
    var wrzesien     = {  nazwa: "Wrzesień",     iloscDni: 30, ilezostalo: 92,  iledni:  244  };
    var pazdziernik  = {  nazwa: "Październik",  iloscDni: 31, ilezostalo: 61,  iledni:  274  };
    var listopad     = {  nazwa: "Listopad",     iloscDni: 30, ilezostalo: 31,  iledni:  305  };
    var grudzien     = {  nazwa: "Grudzień",     iloscDni: 31, ilezostalo: 0,   iledni:  335  };

    var miesiace     = {  ilosc: 12 };

    var lata         = {  obecnyRok: 2016,       ile: 365 };

    if ( miesiac == styczen.nazwa || miesiac == "styczen" || miesiac == "styczeń" || miesiac == 1 ){

        var daysLeft = styczen.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = styczen.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == luty.nazwa || miesiac == "luty" || miesiac == 2){

        var daysLeft = luty.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = luty.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == marzec.nazwa || miesiac == "marzec" || miesiac == 3){

        var daysLeft = marzec.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = marzec.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == kwiecien.nazwa || miesiac == "kwiecień" || miesiac == "kwiecien" || miesiac == 4){

        var daysLeft = kwiecien.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = kwiecien.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == maj.nazwa || miesiac == "maj" || miesiac == 5){

        var daysLeft = maj.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = maj.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == czerwiec.nazwa || miesiac == "czerwiec" || miesiac == 6){

        var daysLeft = czerwiec.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = czerwiec.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == lipiec.nazwa || miesiac == "lipiec" || miesiac == 7){

        var daysLeft = lipiec.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = lipiec.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + finalR/1 + (yearsLeft * 365);

    } else if ( miesiac == sierpien.nazwa || miesiac == "sierpien" || miesiac == "sierpień" || miesiac == 8){

        var daysLeft = sierpien.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = sierpien.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == wrzesien.nazwa || miesiac == "wrzesień" || miesiac == "wrzesien" || miesiac == 9){

        var daysLeft = wrzesien.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = wrzesien.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == pazdziernik.nazwa || miesiac == "październik" || miesiac == "pazdziernik" || miesiac == 10){

        var daysLeft = pazdziernik.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = pazdziernik.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == listopad.nazwa || miesiac == "listopad" || miesiac == 11){

        var daysLeft = listopad.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = listopad.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;

    } else if ( miesiac == grudzien.nazwa || miesiac == "grudzień" || miesiac == "grudzien" || miesiac == 12){

        var daysLeft = grudzien.iloscDni - dzien;
        var yearsLeft = lata.obecnyRok - rok - 1;
        var monthsLeft = grudzien.ilezostalo/1 + daysLeft/1;
        var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
    }

它基本上是波兰语,但是,styczen - 一月,luty - 二月..

最佳答案

第一个错误是您声明并分配了 finalR 变量,然后重复声明并分配了仅在语句内可见的同一变量,因此在第一个 if 您只需将值分配给 finalR

var finalR = styczen.iledni/1 + today/1;

成为:

finalR = styczen.iledni/1 + today/1;

以及所有声明。

然后,styczen 以及您在此语句中分配给 finalR 的所有其他变量在您粘贴的代码中都未定义。您需要将所有这些 block 移到 if 语句之前。

var styczen      = {  nazwa: "Styczeń",      iloscDni: 31, ilezostalo: 335, iledni:  0    };
var luty         = {  nazwa: "Luty",         iloscDni: 29, ilezostalo: 306, iledni:  31   };

最后一个 if 语句中的每个声明都是不必要的。您可以在外部声明每个变量,然后在内部分配它们。如果您需要默认值,您也可以声明并分配它们。

在最后一个 if rok 也未定义的情况下,dzien 将永远不会有你所关注的内容,因为你试图重新分配 dzien 变量,但你在外面的语句中重新声明它没有外部范围。

这部分的很多内容都是相同的,您可以为最终语句创建一个函数并使用它:

var yourfunc = function(arg1, arg2, arg3, lata, finalR) {
    var daysLeft = arg1.iloscDni - arg2;
    var yearsLeft = lata.obecnyRok - arg3 - 1;
    var monthsLeft = arg1.ilezostalo/1 + daysLeft/1;
    var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
}

要查找问题所在,您可以在每个浏览器上使用 js 调试器。

最后@Teemu的评论是对的。

关于javascript - 未定义,它不计数,不工作为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40048244/

相关文章:

javascript - Focus() 在使用 ios 10 safari 浏览器的 ionic 中不起作用

直接在模板中输入时 JavaScript 可以工作,但从 src 文件导入时则不行

javascript - 为什么 .clearRect 函数无法正常工作?

javascript - HTML5 文件上传 - 卡在非常大的文件上 - 仅限 Firefox

javascript - Restivus 未设置端点 Meteor 1.4

javascript - 在 Ember 中,如何在另一个 Controller 中处理从一个 Controller 发送的操作

javascript - jQuery 正则表达式匹配返回空字符串

javascript - ExtJS 动画计数器从 0 到 N

javascript - Mapbox 使用哪种投影

javascript - d3.js 如何在水平对数刻度轴上放置自定义标签