未定义,不计算,不工作原因

时间:2016-10-14 16:48:26

标签: 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 - 1月,luty - 2月..

1 个答案:

答案 0 :(得分:2)

第一个错误是您声明并分配finalR变量,而不是重复声明并分配仅在语句内可见的相同变量,因此在第一个if内只需指定值为finalR

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

成为:

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

以及所有声明。

然后styczen以及您在此语句中分配给finalR的所有其他变量在您粘贴的代码中未定义。您需要在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的评论是对的。