Converting numbers to words - JavaScript
I like how you've reduced all of the words to lists, that's the right start. 

Let's get into it: 

  for(let i = 0; tempNum; i++){


I have no idea what you've doing here, I assume when tempNum===0 then the loop stops? 

Don't do this, it's confusing as hell.

I'm going to suggest that you rewrite the entire thing as a recursive function or a reducing function, but if you insist on using a loop, then just make it a while(true) loop and add a return or a break statement to it to exit it. 

You have a lot of branching logic: 

  for(let i = 0; tempNum; i++){
    if(hundreds){
      if(i){
      }
      if(tens){
        if(wordsForConstruction.hasOwnProperty(tens)){

        }else{
          if(ones){
          }
        }
      }

      if(hundreds){
      }
    }
  }


The term to think about here is cyclomatic complexity keeping track of which branch the code is currently in involves holding a lot of information in your head, and then you have to run through it again for the next number etc. If you code is looking like a lot of these nested if statements, that's a code smell, and you should be doing something else. 

The real issue you have, is that you are manually writing the code to do the 'detect how many hundreds, thousands, millions', instead you you could abstract this to a map. 

What I would do is: 

const powerMap = {
  "million": 1000000, 
  "thousand": 1000, 
  "hundred" : 100,  
  "rest": 1, 
}; //And ofcourse you can extend this to billions, trillions, etc. 


And then you can create a general abstraction to to count how many of each there are: 



const powerMap = {
  "million": 1000000, 
  "thousand": 1000, 
  "hundred" : 100,  
  "rest": 1, 
}; //And ofcourse you can extend this to billions, trillions, etc. 


function getUnitCounts(value) {
    const data = Object.entries(powerMap).reduce(({value, result}, [unitName, power]) =&gt; {
        const nCount = Math.floor(value/power); 
        const nRemainder = value%power; 
        
        return {
            value: nRemainder, 
            result: {
                ...result, 
                [unitName]: nCount
            }
        }           
    
    }, {
         value, 
         result: {}
    }); 
    
    return data.result;        
    
}


console.log(getUnitCounts(20020000)); 
console.log(getUnitCounts(1100)); 
console.log(getUnitCounts(201110)); 




Now - if you're not familar with spread syntax and Array.reduce this might seem confusing. But notice how I don't use a single if statement - all I'm doing is looping over a list and returning an accumulator. Once you've familiar with the odd syntax, this is easier to keep in your head. 

From the answer I've given here, it would now be a matter of converting the count of each unit into the words, and then also applying the words for 0-100 like you have.