뿌

자바스크립트 코딩할때 실수하기 쉬운 한가지(배열)

 <script>
var a = new Array(1, 2, 3, 4);
var b = a;
 
b[0] = 5;
 
alert(a[0]);
</script>
문제
a[0]의 결과값은 5입니다.
 
원인
C언어와 PHP에서는 보통 배열을 선언하면 변수에 실제값을 담고있지만
javascript에서는 주소값을 담고있습니다. C언어로 따지면 포인터인셈이지요.
new가 붙는거라면 주소값을 반환합니다. (* var a = [1, 2, 3, 4]; 도 a에 주소값으로 저장됩니다. )
즉, a배열과 b배열은 같은 메모리를 참조하고 하나의 배열을 바라보고 있으므로 b[0]을 수정하면 메모리상의 배열을 수정하여 a[0]도 바뀌게 됩니다.
 
해결
1. slice();
<script>
var a = new Array(1, 2, 3, 4);
var b = a.slice();

b[0] = 5;

alert(a[0]);
</script>
결과값은 1입니다.
slice() 함수는 배열을 자르는데 사용하지만 파라미터를 넣어주지 않으면 새로운 배열을 반환합니다.
 
2. concat();
 <script>
var a = new Array(1, 2, 3, 4);
var b = a.concat();
 
b[0] = 5;
 
alert(a[0]);
</script>
결과값은 1입니다.
concat() 함수는 배열을 합치는데 사용하지만 이것 또한 파라미터를 넣어주지 않으면 새로운 배열을 반환합니다.
 
 
ps. 이거 때문에 한참 고생한 적이 있어서 혹시 모르시는분들 계실까봐 이렇게 정리했습니다 ^^
 

댓글 2개

처음 알았네요.. ㅎㅎ 감사합니다 ^^
자바스크립트에서 객체는 참조타입, 숫자,boolean은 기본타입으로 됩니다 ㅎㅎ
저도 한참 고생했었어요
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
13-07-14 조회 5,481
13-07-14 조회 5,444
13-07-14 조회 4,753
13-07-14 조회 4,346
13-07-14 조회 4,213
13-07-14 조회 4,264
13-07-14 조회 4,994
13-07-14 조회 4,707
13-07-14 조회 4,414
13-07-14 조회 5,460
13-07-14 조회 5,352
13-07-14 조회 5,115
13-07-14 조회 4,852
13-07-14 조회 5,533
13-07-13 조회 3,792
13-07-01 조회 5,807
13-07-01 조회 5,887
13-07-01 조회 3,984
13-07-01 조회 5,490
13-05-27 조회 4,052
13-05-21 조회 5,109
13-05-02 조회 1만
13-04-29 조회 5,283
13-04-15 조회 5,523
13-04-13 조회 6,461
13-02-27 조회 4,177
13-02-26 조회 6,556
13-02-12 조회 5,326
13-02-01 조회 2.4만
13-01-23 조회 3,603
13-01-09 조회 8,094
13-01-07 조회 5,004
13-01-07 조회 3,746
13-01-04 조회 1.3만
13-01-03 조회 1.2만
12-12-31 조회 6,452
12-12-27 조회 4,581
12-12-27 조회 4,270
12-12-27 조회 8,946
12-12-18 조회 3,759
12-12-12 조회 3,797
12-12-12 조회 6,817
12-12-12 조회 8,234
12-12-05 조회 5,533
12-12-01 조회 6,844
12-11-22 조회 4,772
12-11-09 조회 5,609
12-11-09 조회 7,657
12-10-29 조회 4,876
12-10-16 조회 6,410
12-10-09 조회 5,503
12-09-02 조회 4,602
12-09-01 조회 3,710
12-08-30 조회 4,374
12-08-30 조회 4,377
12-08-28 조회 3,711
12-08-21 조회 7,273
12-08-20 조회 3,802
12-08-18 조회 5,217
12-08-18 조회 3,585
12-08-11 조회 3,742
12-08-09 조회 3,910
12-08-07 조회 3,888
12-08-07 조회 4,470
12-08-01 조회 4,734
12-08-01 조회 4,617
12-07-20 조회 9,982
12-07-17 조회 4,334
12-07-15 조회 4,104
12-07-10 조회 4,372
12-07-09 조회 7,089
12-07-05 조회 3,424
12-07-04 조회 3,556
12-06-30 조회 5,811
12-06-28 조회 3,901
12-06-20 조회 4,075
12-06-16 조회 3,371
12-06-14 조회 4,020
12-06-07 조회 4,041
12-06-06 조회 6,401
12-05-27 조회 4,619
12-05-25 조회 3,364
12-05-25 조회 3,203
12-05-24 조회 3,296
12-05-24 조회 4,646
12-05-23 조회 4,063
12-05-22 조회 6,642
12-05-15 조회 4,159
12-05-15 조회 3,717
12-05-14 조회 3,154
12-05-12 조회 3,612
12-05-11 조회 7,105
12-05-07 조회 4,551
12-04-28 조회 3,742
12-04-25 조회 5,391
12-04-15 조회 3,975
12-04-12 조회 4,824
12-04-11 조회 3,582
12-04-08 조회 3,433
12-03-21 조회 6,484