Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Números não são objetos em JavaScript

Segundo a alternativa A do exercício:

Um ponto importante é que, mesmo números sendo objetos em JavaScript...

Porém números não são objetos em JavaScript.

5 respostas

Ola pedro, Ja pensei dessa mesma forma,porem descobri que os valores primitivos como numero,string, boolean são considerados objetos por debaixo dos panos no JS, exemplo se você abrir o console do seu navegador e por var teste=5; e der enter,e logo apos colocar colocar teste. quando você colocar o ponto vai aparecer uma lista de métodos,e quem tem método e objeto,isso porque o JS ele implementa Wrappers primitivos ou seja internamente ele "embrulha" o seu tipo primitivo que e um numero,string, boolean para dar mais funcionalidades ele como se fosse um objeto,exemplo :

var teste=5;

por debaixo dos panos ele faz algo assim

var objeto = new Number(teste);

ou seja ele cria um objeto,uma referencia por debaixo dos panos a partir da sua variável com o valor primitivo. se desejar se aprofunda mais recomendo esse link: http://alcidesqueiroz.github.io/2014/12/13/javascript-wrapper-objects/ espero ter ajudado e bons estudos ;)

Alison,

Os valores primitivos são primitivos.

No momento em que precisamos utilizar um método/propriedade eles são embrulhados em um objeto (temporariamente), logo após a utilização do método/propriedade, o objeto é novamente convertido para primitivo e como não há referências para o objeto, o garbage collector atuará sobre o mesmo.

Se um primitivo fosse objeto:

let minhaStr = 'Sou primitiva'
let minhaStr2 = 'Sou primitiva'

console.log(minhaStr == minhaStr2) // true

No entanto, deveria ser false considerando que seriam dois objetos diferentes na memória.

Utilizando objetos:

let objStr = new String('Sou objeto')
let objStr2 = new String('Sou objeto')

console.log(objStr == objStr2) // false

São objetos diferentes na memória.

Se um primitivo fosse um objeto, você poderia adicionar e ler suas propriedades no mesmo:

let minhaStr = 'Sou primitiva'

minhaStr.minhaPropriedade = 10 // O código funciona pois o primitivo é embrulhado em um objeto e este recebe a propriedade.

console.log(minhaStr.minhaPropriedade) // undefined O objeto no qual adicionamos a minhaPropriedade já foi descartado. minhaStr não é objeto.

Não é correto dizer que string, number, boolean são objetos. Seria correto dizer que eles podem ser objetos.

Ola Pedro, concordo com você,por isso que eu falei que eles são considerados por debaixo dos panos em JS objetos para dar mais funcionalidades a ele,e não que o valor primitivo e um objeto,eles continuam sendo valores primitivos porem o JS faz esse método para "considera-lo" objeto nesse momento do embrulho,se referindo ao exercício da questão acredito que quem montou a questão se referia a isso e não que ele realmente seja objeto,mas acabou gerando uma má interpretação,ou posso esta errado

Números primitivos quando invocado métodos o JavaScript faz autoboxing promovendo o número primitivo a um objeto Munber. Você citou parte da verdade sobre números no seu link.

Faça

var n = 12.12;
n.toFixed(2);

Se n fosse primitivo você jamais poderia chamar um método.

Como disse, ocorre o auotoboxing para Number.

solução!

Deixei ainda melhor a resposta:

Existem tipos primitivos em JavaScript chamado de literais que podem ser acessados como objetos quanto invocamos algum método. O encapsulamento automático de um primitivo por um objeto pelo interpretador é chamado de autoboxing. Por mais que tenhamos um objeto representando um número, a comparação será pelo valor literal (primitivo) e não pela referência. Números são encapsulados pela função construtora Number.*

Por fim, é uma má prática fazer new String('Olá'). O interpretador do JavaScript utiliza o padrão de projeto FlyWeight para trabalhar com um pool de strings, por isso string é imutável (se fosse mutável, bagunçaria todos os ponteiros para as strings do pool). Quando você usa a forma literal ele acessa esse pool de string em vez de criar sempre uma nova string na memória.