da2k / curso-javascript-ninja

Curso Javascript Ninja
http://blog.da2k.com.br/curso-javascript-ninja/
2.35k stars 2.94k forks source link

[Aula 2] Dúvida entre Objetos e Arrays #312

Closed daniloagostinho closed 9 years ago

daniloagostinho commented 9 years ago

Olá Daciuk,

De primeira que curso mais foda! Meus parabéns! ;)

Que massa saber que no JS não existe Arrays. Pelo que eu entendi arrays são objetos, a final em js tudo é um objeto. Em outras linguagens arrays são arrays? haha confuso isso!

Outro ponto: Por que conseguimos acessar os métodos de um objeto como se fosse um array usando [] simplesmente passando uma aspas simples e sem ela não conseguimos? É feito alguma conversão quando passamos as aspas simples?

Outro pronto, hahaha os objetos são mais usados pelo motivo de serem mais rápidos?

fdaciuk commented 9 years ago

Olá @DaniloAgostinho! Que bom que está curtindo :D

Que massa saber que no JS não existe Arrays. Pelo que eu entendi arrays são objetos, a final em js tudo é um objeto. Em outras linguagens arrays são arrays? haha confuso isso!

Vamos lá: arrays em outras linguagens normalmente tem alguns comportamentos diferentes do que acontece no JS. Um exemplo é que, em outras linguagens, arrays têm um tamanho específico e imutável, e esse tamanho é reservado na memória quando o array é criado.

Em JS, arrays tem tamanhos e quantidade de itens variados. Você pode adicionar e remover itens a qualquer momento. Em um resumo beeeem resumido é isso :D


Outro ponto: Por que conseguimos acessar os métodos de um objeto como se fosse um array usando [] simplesmente passando uma aspas simples e sem ela não conseguimos? É feito alguma conversão quando passamos as aspas simples?

Quando você usa aspas (simples ou duplas), o JS entende que aquilo é uma string. Para acessar propriedades e métodos de objetos com notação de colchetes, você passa o nome da propriedade ou método como string, senão o JS vai procurar uma variável com aquele nome.

Exemplo:

var myObj = {
  prop1: 1,
  prop2: 2
};

var myVar = 'prop1';

myObj.prop1; // 1
myObj.prop2; // 2
myObj[ myVar ] // 1 -> Porque o valor da variável myVar é a string com o nome de uma propriedade que existe no objeto (prop1)
myObj[ 'prop2' ]; // 2
myObj[ prop1 ]; // prop1 is not defined -> Porque não existe uma variável chamada `prop1` definida

Outro pronto, hahaha os objetos são mais usados pelo motivo de serem mais rápidos?

Depende muito do caso. Arrays você vai utilizar quando precisar de uma lista de elementos. Objetos, quando você precisar de propriedades e métodos nomeados. Mas nada impede de você ter um array de objetos:

var myArray = [
  { prop1: 1, prop2: 2 },
  { prop1: 'prop1', prop2: 'prop2' }
];

Mas isso veremos mais pra frente, não se preocupe ;)

Ficou claro?

daniloagostinho commented 9 years ago

Sim! boas dicas!

fdaciuk commented 9 years ago

o/