---
title: "Är detta en bugg i reverse()-metoden?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/178309-är-detta-en-bugg-i-reverse-metoden"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "mappo"
published: "2009-04-27T14:43:32.000Z"
updated: "2009-04-27T15:10:29.000Z"
replies: 4
views: 391
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/178309-är-detta-en-bugg-i-reverse-metoden"
---

# Är detta en bugg i reverse()-metoden?

## #1 — mappo, 2009-04-27T14:43Z

Kod nedan, men först på svenska:

Skapa array a={0,1,2}.
Skapa array b=a.
Gör reverse på b.
Skriv ut a och b.

Det som borde hända (imho) är att a={0,1,2} och b={2,1,0},
**men** det som verkar hända är att a också blir omvänd.  :q

Kan någon förklara vad som händer?

```
<html>
	<body>
		<script type="text/javascript">

			var a = new Array() ;
			a[0] = 0 ;
			a[1] = 1 ;
			a[2] = 2 ;

			var b = new Array() ;
			b = a ;

			b.reverse() ;

			document.write(a + "<br />" + b) ;

		</script>
	</body>
</html>
```

Resultat:

```
2,1,0
2,1,0
```

Men jag tycker, som sagt, att det borde varit:

```
0,1,2
2,1,0
```

eftersom jag aldrig bett om att vända på a.

Permalänk: https://www.webforum.nu/p/178309

## #2 — nitro2k01, 2009-04-27T14:52Z

Arrayer i JS funkar lite som pekare i C. Efter kommandot b = a; så pekar i själva verket både b och a mot samma objekt. Den nya arrayen du definierade åt b "försvinner". (Det allokerade minnet frias senare av garbage collectorn som märker att den arrayen inte refereras någonstans längre)
För att göra det du vill måste du klona arrayen på ett eller annat sätt.

Permalänk: https://www.webforum.nu/p/2183330

## #3 — mappo, 2009-04-27T15:10Z

@ nitro2k01: tackar för det!

Jag bytte ut b = a ;
mot b = a.slice() ;
vilket skapar en kopia på "värde-nivå" och alltså funkar gyllene!

Permalänk: https://www.webforum.nu/p/2183332

## #4 — headbug, 2009-04-27T15:10Z

Precis som nitro säger så är =-tecknet lite mer aggresivt i JS än vad du trodde fram tills nu, du säger att dom ska vara och tolkas som samma sak, inte likadana (om man får göra en liknelse med småbarnstjäbblet om lika vs. samma :) ). 

Det du vill göra är att skapa b och sedan fylla b med innehållet hämtat från a, såhär:

```
var a = [1, 2, 3];
var b = a.slice(0);
```

/edit: Aha, du hann svara själv :)

Permalänk: https://www.webforum.nu/p/2183334

## #5 — mappo, 2009-04-27T15:10Z

@ nitro2k01: tackar för det!

Jag bytte ut
b = a ;
mot
b = a.slice() ;
vilket skapar en kopia på "värde-nivå" och alltså funkar gyllene!

EDIT: @ headbug: jag hann hitta slice-metode innan jag såg ditt svar, men tack iaf!

Permalänk: https://www.webforum.nu/p/2183333

---

Tråden på webben: https://www.webforum.nu/amne/javascript/178309-är-detta-en-bugg-i-reverse-metoden
