자바스크립트 코딩할때 실수하기 쉬운 한가지(배열)
<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개
13년 전
처음 알았네요.. ㅎㅎ 감사합니다 ^^
13년 전
자바스크립트에서 객체는 참조타입, 숫자,boolean은 기본타입으로 됩니다 ㅎㅎ
저도 한참 고생했었어요
저도 한참 고생했었어요
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 5730 | 13년 전 | 778 | ||
| 5729 | 13년 전 | 3594 | ||
| 5728 | 13년 전 | 1162 | ||
| 5727 |
freejazzme
|
13년 전 | 1115 | |
| 5726 | 13년 전 | 1457 | ||
| 5725 |
itlang
|
13년 전 | 443 | |
| 5724 | 13년 전 | 522 | ||
| 5723 |
crocojea
|
13년 전 | 1509 | |
| 5722 | 13년 전 | 1994 | ||
| 5721 | 13년 전 | 719 | ||
| 5720 |
쿠우우우우
|
13년 전 | 475 | |
| 5719 | 13년 전 | 621 | ||
| 5718 |
|
13년 전 | 598 | |
| 5717 | 13년 전 | 1454 | ||
| 5716 |
|
13년 전 | 1045 | |
| 5715 | 13년 전 | 473 | ||
| 5714 | 13년 전 | 475 | ||
| 5713 | 13년 전 | 539 | ||
| 5712 |
|
13년 전 | 777 | |
| 5711 | 13년 전 | 702 | ||
| 5710 |
minini
|
13년 전 | 494 | |
| 5709 |
|
13년 전 | 1338 | |
| 5708 | 13년 전 | 694 | ||
| 5707 | 13년 전 | 5865 | ||
| 5706 |
오니기리죠
|
13년 전 | 1030 | |
| 5705 |
HSEngine
|
13년 전 | 660 | |
| 5704 |
Giggle
|
13년 전 | 1703 | |
| 5703 | 13년 전 | 513 | ||
| 5702 |
AMDbest
|
13년 전 | 1426 | |
| 5701 |
|
13년 전 | 2895 | |
| 5700 | 13년 전 | 507 | ||
| 5699 |
미션임파썩을
|
13년 전 | 550 | |
| 5698 | 13년 전 | 635 | ||
| 5697 | 13년 전 | 552 | ||
| 5696 | 13년 전 | 460 | ||
| 5695 |
|
13년 전 | 716 | |
| 5694 | 13년 전 | 456 | ||
| 5693 | 13년 전 | 986 | ||
| 5692 | 13년 전 | 955 | ||
| 5691 |
쉽다zzz
|
13년 전 | 721 | |
| 5690 | 13년 전 | 477 | ||
| 5689 | 13년 전 | 638 | ||
| 5688 | 13년 전 | 1419 | ||
| 5687 | 13년 전 | 469 | ||
| 5686 | 13년 전 | 2455 | ||
| 5685 |
AMDbest
|
13년 전 | 2162 | |
| 5684 | 13년 전 | 2046 | ||
| 5683 | 13년 전 | 1374 | ||
| 5682 |
AMDbest
|
13년 전 | 709 | |
| 5681 | 13년 전 | 3827 | ||
| 5680 |
|
13년 전 | 1690 | |
| 5679 | 13년 전 | 2099 | ||
| 5678 |
|
13년 전 | 537 | |
| 5677 |
mobiler
|
13년 전 | 474 | |
| 5676 | 13년 전 | 1615 | ||
| 5675 | 13년 전 | 595 | ||
| 5674 |
PHPㅡASP프로그래머
|
13년 전 | 1826 | |
| 5673 |
PHPㅡASP프로그래머
|
13년 전 | 1499 | |
| 5672 |
PHPㅡASP프로그래머
|
13년 전 | 1290 | |
| 5671 |
PHPㅡASP프로그래머
|
13년 전 | 1222 | |
| 5670 |
PHPㅡASP프로그래머
|
13년 전 | 4617 | |
| 5669 | 13년 전 | 3053 | ||
| 5668 | 13년 전 | 1422 | ||
| 5667 | 13년 전 | 501 | ||
| 5666 | 13년 전 | 1152 | ||
| 5665 |
Darby
|
13년 전 | 1615 | |
| 5664 | 13년 전 | 1344 | ||
| 5663 | 13년 전 | 1131 | ||
| 5662 | 13년 전 | 796 | ||
| 5661 | 13년 전 | 459 | ||
| 5660 | 13년 전 | 844 | ||
| 5659 | 13년 전 | 712 | ||
| 5658 | 13년 전 | 532 | ||
| 5657 | 13년 전 | 538 | ||
| 5656 | 13년 전 | 991 | ||
| 5655 | 13년 전 | 437 | ||
| 5654 | 13년 전 | 391 | ||
| 5653 |
졸린다젠장
|
13년 전 | 481 | |
| 5652 |
|
13년 전 | 401 | |
| 5651 | 13년 전 | 1032 | ||
| 5650 | 13년 전 | 727 | ||
| 5649 | 13년 전 | 2239 | ||
| 5648 | 13년 전 | 481 | ||
| 5647 | 13년 전 | 757 | ||
| 5646 | 13년 전 | 1494 | ||
| 5645 | 13년 전 | 685 | ||
| 5644 | 13년 전 | 617 | ||
| 5643 |
|
13년 전 | 574 | |
| 5642 |
쿠마하우스
|
13년 전 | 685 | |
| 5641 |
goaway
|
13년 전 | 1084 | |
| 5640 |
쿠마하우스
|
13년 전 | 649 | |
| 5639 | 13년 전 | 677 | ||
| 5638 |
쿠마하우스
|
13년 전 | 1002 | |
| 5637 | 13년 전 | 825 | ||
| 5636 | 13년 전 | 1421 | ||
| 5635 |
goaway
|
13년 전 | 912 | |
| 5634 |
lllolll
|
13년 전 | 422 | |
| 5633 | 13년 전 | 971 | ||
| 5632 | 13년 전 | 4276 | ||
| 5631 | 13년 전 | 582 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기