Caesars Cipher can't understand why undefined

Tell us what’s happening:
I’ve understood, that my code is not very beautiful, but can’t understand why the “undefined” is printed before my result? Could anybody help me?

Your code so far

function rot13(str) { // LBH QVQ VG!
  var newStrArr = []; 
  var x = 13;
  var addedStr;
  var finalStr; 
  var result;
  var final;
   //console.log(newStr.charCodeAt(newStr.length-1));
  for (var i = 0; i <str.length; i++){
       addedStr = str.charCodeAt(i);
     // console.log(addedStr);
    if (addedStr < 65 || addedStr > 90 ){
      finalStr = addedStr;
     // console.log(finalStr);
    }
    else if (addedStr < 65+x){
      finalStr = addedStr + x;  
      //console.log(finalStr);
    } else finalStr = addedStr - x;
     newStrArr.push(finalStr);
      
  } //console.log(newStrArr); 
  for(var j= 0; j <newStrArr.length; j++){
    result = String.fromCharCode(newStrArr[j]);
    final +=result;
  
}  console.log(final);
  
  //result = String.fromCharCode(result);
 // console.log(parseFloat(+result));
  return  final;
}

// Change the inputs below to test
rot13("SERR PBQR PNZC");

Your browser information:

Your Browser User Agent is: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36.

Link to the challenge:

oops, thanks, Randell!

It’s was very useful, that you just show me my mistake and don’t advise any solutions. I’ve solved the problem by myself!!! Thank you very much!