Javascript 未定义,不计算,不工作为什么

Javascript 未定义,不计算,不工作为什么,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(); //Funkc

我制作了一个脚本来计算我们的生日已经过去了多少天,但是当它显示出来时,它说“未定义”,我不知道为什么,我不认为有问题,也许你可以帮我

    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;
    }
var dzien=prompt(“Podaj dzieńurodzin:”);
var miesiac=提示(“Podaj miesiąc urodzin:”;
var rok=提示(“Podaj rok urodzin:”);
var数据=新日期()//Funkcja w js
var today=data.getDate()//Pobranie dnia(编号1->31)
var month=data.getMonth()+1//Pobranie miesiąca,w js 0-11->dlatego玩笑+1
var finalR=0;
如果(月份==1){
var finalR=styczen.iledni/1+today/1;
}否则,如果(月==2){
var finalR=luty.iledni/1+今天/1;
}否则,如果(月份==3){
var finalR=marzec.iledni/1+今天/1;
}否则,如果(月==4){
var finalR=kwiecien.iledni/1+today/1;
}否则,如果(月==5){
var finalR=maj.iledni/1+today/1;
}否则,如果(月==6){
var finalR=czerwiec.iledni/1+today/1;
}否则,如果(月==7){
var finalR=lipec.iledni/1+today/1;
}否则,如果(月==8){
var finalR=sierpien.iledni/1+today/1;
}否则,如果(月==9){
var finalR=wrzesien.iledni/1+today/1;
}否则,如果(月==10){
var finalR=pazdziernik.iledni/1+today/1;
}如果(月份==11),则为其他情况{
var finalR=listopad.iledni/1+today/1;
}否则,如果(月==12){
var finalR=grudzien.iledni/1+today/1;
}

if(dzien>31 | | miesiac>12 | | rok>2016 | | dzien第一个错误是您声明并分配了
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语句中的每个声明都不是必需的。您可以在外部声明每个变量,然后在内部分配它们。如果需要默认值,您也可以声明并分配它们

在最后一个变量中,如果
rok
也未定义,
dzien
将永远不会有您想要的方面,因为您试图重新分配dzien变量,但您在语句中重新声明了它,即outside没有作用域

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

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在他的评论中是正确的。

第一个错误是您声明并分配
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语句中的每个声明都不是必需的。您可以在外部声明每个变量,然后在内部分配它们。如果需要默认值,您也可以声明并分配它们

在最后一个变量中,如果
rok
也未定义,
dzien
将永远不会有您想要的方面,因为您试图重新分配dzien变量,但您在语句中重新声明了它,即outside没有作用域

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

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的评论是正确的。

“它说未定义”什么是未定义的?最终结果,它应该显示经过了多少天所以…做了一些基本的调试,比如检查那些
测试是否真的成功了?如果它们都不匹配,那么最终结果永远不会被定义。首先,你在提示符中写下你的生日,然后是月份和期望,你可以用日期来计算直接。结果以毫秒为单位,然后将毫秒转换为天。最多三行…?“它表示未定义”什么是未定义的?最终结果,它应该显示经过了多少天所以…做了一些基本的调试,比如检查那些
测试是否真的成功了?如果它们都不匹配,那么最终结果永远不会被定义。首先,你在提示符中写下你的生日,然后是月份和期望,你可以用日期来计算直接。结果以毫秒为单位,然后将毫秒转换为天。最多三行。。。?