Bem-vindos à nossa comunidade!

Junte-se a nós e faça parte hoje mesmo!

Aula: Tipos em JavaScript: Object

Raquel

Membro
Moderador
Cadastro
24/9/20
Postagens
407
Curtidas
443
Pontuação
150
Os atributos de um Objeto são todos Strings? Isso faria desse objeto um JSON válido?

Não se enganem, galerinha. A resposta é não... não necessariamente!

Os atributos de um Objeto não necessariamente são Strings. Você pode ter Arrays, Numbers, Objects, Functions (que dentro de objetos são chamadas de métodos) e vários outros tipos dentro de um mesmo objeto.

Além disso, para mostrar que um valor é uma String você precisa usar aspas simples ou duplas, caso contrário o JavaScript pode interpretar erroneamente, como um Number por exemplo.

Porém, de fato é verdade que as chaves de um objeto sempre serão Strings. Inclusive, se você tentar usar qualquer outra coisa, o JavaScript vai lá e muda para String, então não adianta teimar.

Mesmo com tudo isso, os arquivos do tipo JSON não são compostos somente de Strings, eles podem conter todos os tipos supracitados.
 
Last edited:

Raquel

Membro
Moderador
Cadastro
24/9/20
Postagens
407
Curtidas
443
Pontuação
150
Mas o JSON usa aspas duplas... não é a mesma coisa que uma String?

É tudo questão de sintaxe!

As aspas são usadas para todo e qualquer tipo, sendo possível usar somente tipos numéricos, booleanos e Strings.

Para representar Strings no JSON, fica assim:

JSON:
"string": "Isso aqui é uma String"

Para números e booleanos, fica assim:

JSON:
    "numero": 2020
    "booleano": true

Para conferir os tipos dos atributos dentro de um Objeto, você pode fazer da seguinte maneira:

JavaScript:
    const prod2 = {
        nome: 'Camisa Polo',
        preco: 79.90
    }
   
    console.log(typeof prod2.nome) //retorna String
    console.log(typeof prod2.preco) //retorna number
 

Raquel

Membro
Moderador
Cadastro
24/9/20
Postagens
407
Curtidas
443
Pontuação
150
Diferenças entre Object e Array

Os Objetos são estruturas de par chave-valor.

Podemos usar a notação literal de objetos, que é feita desta maneira:

JavaScript:
let obj = {}

Assim, nós criamos um objeto vazio. Podemos acrescentar propriedades a ele dinâmica ou diretamente:

JavaScript:
    //Criando propriedades dinamicamente
    let obj = {}
    obj.nome = "Objeto 01"
    console.log(obj)//imprime {nome: 'Objeto 01' }
   
    //Criando propriedades diretamente
   
    let obj2 = {
        nome: "Objeto 02"
    }
   
    console.log(obj2) //imprime {nome: 'Objeto 02' }

Os objetos podem, ainda, ser criados por meio do operador new, como no caso das funções construtoras.

Os Arrays são variáveis capazes de armazenar mais de um valor. A sintaxe é:

JavaScript:
let arr = []

Onde você pode criar o Array já com os valores:

JavaScript:
let valores = [1, 2, 3, 4, 5]
console.log(valores)//imprime [1, 2, 3, 4, 5]

Ou adicionar a esse Array os valores, por meio da propriedade push do Array:

JavaScript:
let arr = []
arr.push("Funciona", "Dessa", "Maneira")
console.log(arr)//imprime [ 'Funciona', 'Dessa', 'Maneira' ]

A confusão aqui acontece porque o JavaScript armazena os valores dos construtores nativos em Object. É comum ver por aí alguém dizendo que "quase tudo é objeto no JavaScript" e, quando não é objeto, é função.

Você pode ver isso como abaixo:

JavaScript:
    let arr = new Array
    console.log(typeof arr) //imprime object!

Ou, ainda:

JavaScript:
    let str = new String
    console.log(typeof str)//também é object

Mas, para Function:

JavaScript:
    let func = new Function
    console.log(typeof func)//retorna function!
 
Last edited:

Raquel

Membro
Moderador
Cadastro
24/9/20
Postagens
407
Curtidas
443
Pontuação
150
Criar de forma estática e de forma dinâmica

Basicamente, criar de forma estática é quando você cria o objeto já com os atributos e valores dentro dele.

Desssa maneira:


JavaScript:
//criando os atributos estaticamente, já com atributo e valor "amarrados"

let aluna = {
    nome: 'Maria',
    curso: 'Web Moderno'
}

console.log(aluna.nome) //imprime Maria
console.log(aluna.curso) //imprime Web Moderno

Enquanto que, ao criar de forma dinâmica, é quando se cria tanto os atributos quanto os valores simultaneamente.

Dessa maneira:

JavaScript:
let instrutora = {} //objeto vazio
instrutora.nome = 'Raquel' //criação dinâmica, na mesma hora criei o nome do atributo e lhe atribuí um valor
console.log(instrutora.nome) //imprime Raquel
 

mourabraz

Membro
Moderador
Cadastro
23/12/20
Postagens
138
Curtidas
185
Pontuação
100
Cidade
Leiria
Oi! Dando uma de intrometido de novo. Mas eu gosto de ler e gosto de comentar.

Em javascript os Objetos são a santidade. Tudo são objectos, tudo mesmo, que não seja um valor primitivo. Ou seja, existem dois grupos de tipos.
Os tipos primitivos e os tipos objecto (em relação aos primitivos - pode considerar o modelo mental tal e qual se pensa em C, mas tenha em consideração que se tratando de javascript, os valores são considerados, classificados como primitivos, mas existem coisas por trás, ou seja em comparação ao C pense neles como um modelo e não como uma forma exata como é em C)

Até mesmo Funções são Objectos. São um Objecto especial, mas são. São especiais porque como Objectos que são além de outras propriedades e de "herdar" no final de Object, possuem uma "propriedade" especial que possui trecho de código executável.

O que não for null, undefined, string, number, boolean, bigInt ou Symbol é um Object.

Em relação ao typeof retornar function em funções, e não object, bem aí a imaginação pode correr livre, eu imagino que a ideia seria ajudar dando uma diferenciada entre os diversos Objects que existem, mas daí em Objects que são Arrays ele retorna object, então já não server né. E com null retorna Object esse também não ajuda né.


Vou postar uma imagem que montei para uns slides:
1632298907904.png

E um link com uma curiosidade do typeof null retornar object
https://2ality.com/2013/10/typeof-null.html?ck_subscriber_id=701296460



Abraços
 
Top