Search code examples
javascriptarraysnode.jsdatetypeof

typeof !== "undefined", comparing dates, new Date, Math.min / What is wrong with this simple js code?


This code is on my nodeJS server. Every time the server gets to it, it crashes. Don't know what's wrong... Could someone help me?

dateArray[11], dateArray[12] and dateArray[13] are either empty or are Date values.

var dateArray11 = null;
var tempDateValue = "";
if ((typeof dateArray[11] !== "undefined") || (typeof dateArray[12] !== "undefined") || (typeof dateArray[13] !== "undefined")) {
    dateArray11 = new Date(Math.min((dateArray[11].getTime()), (dateArray[12].getTime()), (dateArray[13].getTime())));
    if (dateArray11.getTime() === dateArray[11].getTime()) {
        tempDateValue = 11;
    }
    if (dateArray11.getTime() === dateArray[12].getTime()) {
        tempDateValue = 12;
    }
    if (dateArray11.getTime() === dateArray[13].getTime()) {
        tempDateValue = 13;
    }
}

Solution

  • Since you said that dateArray[11], dateArray[12] and dateArray[13] are either empty or are Date values.

    You cannot call a getTime() function of an empty or undefined value.

    Before you call it, you should check if dateArray[11], dateArray[12] and dateArray[13] are Date Objects. You can see how to check that in this answer: https://stackoverflow.com/a/643827/3442014


    EDIT: This is my aproach of what you're doing:

    var dateArray=[];
    dateArray[11]=new Date("2011/06/31");
    dateArray[12]=new Date("2011/06/26");
    dateArray[13]="";
    
    var tempDateValue = "";
    
    var dates=[];
    if (dateArray[11] instanceof Date) dates.push(dateArray[11]);
    if (dateArray[12] instanceof Date) dates.push(dateArray[12]);
    if (dateArray[13] instanceof Date) dates.push(dateArray[13]);
    
    var min = new Date(Math.min.apply(null,dates));
    
    var tempDateValue = dates.map(Number).indexOf(+min) + 11;