뿌

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

 <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건
+
제목 글쓴이 날짜 조회
12-08-29 조회 4,178
12-08-07 조회 3,839
12-08-03 조회 3,647
12-07-31 조회 3,755
12-07-30 조회 3,706
12-07-16 조회 3,905
12-07-15 조회 3,739
12-07-07 조회 3,602
12-07-06 조회 3,805
12-07-03 조회 3,763
12-06-29 조회 3,375
12-06-22 조회 3,749
12-06-17 조회 4,007
12-05-21 조회 3,934
12-05-02 조회 3,452
12-05-02 조회 4,247
12-05-02 조회 3,368
12-04-30 조회 3,570
12-04-30 조회 3,248
12-03-17 조회 4,118
12-03-10 조회 3,447
12-03-08 조회 3,969
12-03-03 조회 3,682
12-02-27 조회 5,102
12-02-17 조회 4,389
12-02-16 조회 4,674
12-02-03 조회 3,338
12-01-31 조회 3,250
12-01-24 조회 3,246
12-01-17 조회 3,954
12-01-05 조회 3,496
11-12-30 조회 3,228
11-12-23 조회 4,783
11-12-08 조회 3,552
11-12-07 조회 4,507
11-11-27 조회 3,938
11-11-25 조회 4,264
11-11-23 조회 3,707
11-11-22 조회 3,565
11-11-09 조회 3,275
11-10-23 조회 3,218
11-10-19 조회 3,170
11-10-08 조회 2,853
11-10-04 조회 2,853
11-10-04 조회 5,312
11-09-01 조회 4,391
11-08-13 조회 2,565
11-08-06 조회 3,249
11-07-11 조회 3,643
11-06-27 조회 3,002
11-06-21 조회 2,666
11-06-13 조회 2,475
11-06-07 조회 2,484
11-05-26 조회 2,442
11-04-20 조회 2,769
11-03-21 조회 2,869
11-03-18 조회 2,561
11-03-11 조회 2,582
11-02-07 조회 2,407
11-01-18 조회 2,729
11-01-12 조회 2,451
11-01-06 조회 2,546
10-12-10 조회 2,805
10-12-09 조회 2,656
10-12-08 조회 5,088
10-11-29 조회 2,922
10-11-28 조회 2,828
10-11-28 조회 2,657
10-11-19 조회 2,851
10-11-04 조회 2,728
10-10-21 조회 2,452
10-10-19 조회 3,410
10-10-12 조회 2,731
10-10-07 조회 2,571
10-09-30 조회 3,525
10-09-17 조회 3,937
10-09-17 조회 3,880
10-05-31 조회 3,588
09-12-31 조회 3,725
09-07-23 조회 5,052
08-09-16 조회 3,253
08-09-06 조회 2,995
08-09-04 조회 3,416
08-08-16 조회 4,448
08-08-15 조회 3,315
08-08-14 조회 4,532
08-08-12 조회 3,999
08-07-23 조회 2,817
08-07-10 조회 3,763
08-07-04 조회 2,993
08-06-27 조회 7,632
08-06-19 조회 4,944
08-05-27 조회 5,546
08-05-25 조회 5,381
08-05-23 조회 3,459
08-05-23 조회 4,621
08-05-21 조회 4,975
08-05-20 조회 4,088
08-05-20 조회 3,313
08-04-18 조회 4,385