2017-06-06 17 views
1

En JavaScript, certaines méthodes font une copie de l'objet qui l'a invoqué alors que d'autres ne le font pas.Pourquoi certaines méthodes en JavaScript font-elles une copie de l'objet invoqué?

Par exemple:

var numbers = [1, 2, 3, 4, 5]; 
numbers.map(function(x) { return x + 1 }); 
console.log(numbers); // [1, 2, 3, 4, 5]; 

Il fait une copie des « numéros » que vous devez mettre à une autre variable.

Attendu que:

var numbers = [1, 2, 3, 4, 5]; 
numbers.reverse(); 
console.log(numbers); // [5, 4, 3, 2, 1]; 

Il modifie directement "les chiffres". Quelqu'un pourrait-il expliquer pourquoi?

+0

Lisez la documentation pour chaque méthode – charlietfl

+0

Certaines méthodes créent un nouveau tableau, d'autres modifient le tableau en place. C'est principalement fait de cette façon pour plus de commodité, généralement quand vous mappez quelque chose, vous obtenez un nouveau tableau, etc. – adeneo

+0

Je ne sais pas pourquoi cette question attire des downvotes? –

Répondre

1

Ceci est dû à la différence de temps d'incorporation des méthodes dans le JavaScript.

La méthode inverse était là à partir de la première version de ECMAScript.

La carte a été ajoutée relativement récemment dans la 5e version.

Il existe une tendance à être plus fonctionnel de nos jours entre les langues. L'un des principes fondamentaux dans les langages fonctionnels est immutabilité des données. Par conséquent, ces nouvelles méthodes du tableau (à savoir la carte, le filtre, etc.) sont fonctionnelles et ne modifient pas le tableau source.

1

Les méthodes de tableau dans JavaScript est largement classés en trois - Méthodes Mutator - méthodes d'accès - Méthodes d'itération

méthodes Mutator - Ex: reverse(), push() etc: modifier le tableau. Comme leur nom l'indique, ces méthodes font muter le tableau sur lequel elles sont appelées. - Ex: include(), concat() etc: - ne pas modifier le tableau et retourner une représentation du tableau.i.e un nouveau tableau est retourné qui est un tableau modifié.

Méthodes d'itération -Ex: filter(), map() - prend comme arguments les fonctions à rappeler lors du traitement du tableau. Dans ces méthodes, la longueur du tableau est déjà échantillonnée/copiée et le rappel est effectué sur cette ligne. - EX: join() Ces méthodes sont de nature générique et s'appliquent aux objets qui ressemblent à des tableaux.

L'explication détaillée sur ce qui peut être trouvé dans le lien ci-dessous: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype

Hope this helps !!!

+0

* Toutes * les méthodes de tableau sont génériques. Par standard. – Bergi