Q:

Formatar moeda com separador de milhar

Tenho o seguinte código:
function numberParaReal(numero){
    var formatado = "R$ " + numero.toFixed(2).replace(".",","); 
    return formatado;
}

function realParaNumber(texto){
    var compativelComParseFloat = texto.replace("R$ ","");
    compativelComParseFloat = compativelComParseFloat.replace(",","."); 
    var valor = parseFloat(compativelComParseFloat);
    return valor;
}

Porem ele só exibe valores nesse formato: 1000,00. 
Queria deixar assim: 1.000,00 ~ 100.000,00 ~ 10.000.000,00 e assim vai...
Seria alguma coisa como 3 casas antes da vírgula recebe ponto, só não sei como fazer isso. 
Provavelmente devem existir funções prontas para este tipo de situação, porém como estou aprendendo, não seria o ideal eu utilizar de funções prontas. 

A:

Você pode usar a função toLocaleString(), que é parte do protótipo do Number.  Por exemplo, para converter 124231.45 e 1242311234.45 para o padrão brasileiro, use, respectivamente:
(124231.45).toLocaleString('pt-BR'); // => "124.231,45"

(1242311234.45).toLocaleString('pt-BR'); // => "1.242.311.234,45"

A:

Usando o seu código fiz algumas modificações:

function numberToReal(numero) {
    var numero = numero.toFixed(2).split('.'); 
    numero[0] = "R$ " + numero[0].split(/(?=(?:...)*$)/).join('.'); 
    return numero.join(',');
}

var x = numberToReal(9999000.33);
console.log(x);

var y = numberToReal(100000);
console.log(y);

var z = numberToReal(10.50);
console.log(z);

O que eu faço é o seguinte:
Primeiro pego o número e fixo ele com 2 casas decimais e separo a string em um array de 2 partes (antes e depois do ponto). 
var numero = numero.toFixed(2).split('.'); 
// Se o número inicial for 100.00, numero[0] será 100 e numero[1] será 00

Dessa forma na segunda linha eu posso trabalhar o número excluindo as casas decimais (numero[0]), o que o split, o regex e o join fazem nessa parte eu explico nessa resposta. 
numero[0] = "R$ " + numero[0].split(/(?=(?:...)*$)/).join('.'); 

Depois é só retornar o número formatado juntando com as casas decimais usando a virgula. 
return numero.join(',');

A:

Eu uso esse polyfill nos meus projetos. 
ele cria um método que você pode utilizar em todas as suas variáveis que são do tipo Number
Recebe como parametros:

Número de casas decimais
O simbolo que você deseja usar
O simbolo usado para separar as milhares
O simbolo usado para separar as decimais

Ex:
var numero = 123456.78;
numero.formatMoney(2, "R$ ", ".", ","); 

Acredito que possa te ajudar. 

Number.prototype.formatMoney = function(places, symbol, thousand, decimal) {
 places = ! isNaN(places = Math.abs(places)) ?  places : 2;
 symbol = symbol ! == undefined ?  symbol : "$";
 thousand = thousand || ",";
 decimal = decimal || "."; 
 var number = this, 
     negative = number < 0 ? "-" : "", 
     i = parseInt(number = Math.abs(+number || 0).toFixed(places), 10) + "",
     j = (j = i.length) > 3 ?  j % 3 : 0;
 return symbol + negative + (j ?  i.substr(0, j) + thousand : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand) + (places ?  decimal + Math.abs(number - i).toFixed(places).slice(2) : "");
};

// Aqui para testar
var a = 3211000.354;

document.getElementById('testP').innerHTML = a.formatMoney(2, "R$ ", ".", ","); 
<p id="testP"></p>

