2011-01-26 5 views
54

두 사람의 개념적 차이점을 설명 할 수 있습니까? 두 번째 배열은 기존 배열에 대한 모든 참조를 파기하여 새 배열을 만들고, .length = 0은 배열을 그냥 비 웁니다. 하지만 내 경우에는 작동하지 않았다.Array.length = 0과 Array = [] 사이의 차이점은 무엇입니까?

//Declaration 
var arr = new Array(); 

아래의 코드는 반복적으로 실행되는 루핑 코드이다.

$("#dummy").load("something.php",function(){ 
    arr.length =0;// expected to empty the array 
    $("div").each(function(){ 
     arr = arr + $(this).html(); 
    }); 
}); 

하지만 arr.length=0 대신에 arr =[]으로 코드를 대체 할 경우 잘 작동합니다. 아무도 여기서 일어날 일을 설명 할 수 있습니까?

+6

왜 코드가 반복되는'편곡 = 편곡 + $ (이) .html 중에서() (오페라 11을 테스트)'? 배열에 물건을 추가하려면 대신'Array.push()'를 사용해야합니다. – BoltClock

+1

그것은 이미 9 upvoted 대답이 있기 때문에 재미 있어요, 아직 그것은 ** 명확하지 않다 ** OP의 intetion은 무엇입니까? – galambalazs

+0

@Bolt - 방금 여기에 코드 샘플을주었습니다, 원래 코드는 요소를 동적으로 배열에 추가합니다 .. push() 대신 배열에 요소를 추가하기로했습니다. 그게 제가 찾고있는 것에 많은 차이를 만들어 줍니까? –

답변

74

foo = []은 새 배열을 만들고 변수에 대한 참조를 할당합니다. 다른 참조는 영향을받지 않으며 여전히 원래 배열을 가리 킵니다.

foo.length = 0은 배열 자체를 수정합니다. 다른 변수를 통해 액세스하면 여전히 수정 된 배열을 가져옵니다.

는 두 번째가 거꾸로 기존의 배열

에 대한 모든 참조를 파괴하여 새 배열을 생성하는 곳 읽기. 새 배열을 만들고 다른 참조를 파괴하지 않습니다.

var foo = [1,2,3]; 
var bar = [1,2,3]; 
var foo2 = foo; 
var bar2 = bar; 
foo = []; 
bar.length = 0; 
console.log(foo, bar, foo2, bar2); 

을 제공합니다

[] [] [1, 2, 3] [] 
+0

하지만 여전히 ...이 문제를 설명하는 데 도움이되는 이유를 이해하지 못합니다. 내가 이해 한 바로는'arr'은 전역 변수이므로 모든 참조는 같은 객체를 가리켜 야합니다. –

+0

당신은 그가 요구 한 것을 OP에게 주었지만 그가 필요로하는 것은 아니 었습니다. :) 때로는이 두 가지가 같지 않습니다. – galambalazs

+0

David,하지만 여전히 위의 경우에 배열이 길이 = 0으로 비우지 않는 이유를 이해하지 못합니다. 배열에있는 요소의 동적 생성과 관련이 있습니까? –

1

여기에 최고의 다음 예에서 설명되는 차이 : 라이브 데모는 여기에서 볼 수 있습니다

var arrayA = [1,2,3,4,5]; 

function clearUsingLength (ar) { 
    ar.length = 0; 
} 

function clearByOverwriting(ar) { 
    ar = []; 
} 

alert("Original Length: " + arrayA.length); 
clearByOverwriting(arrayA); 
alert("After Overwriting: " + arrayA.length); 
clearUsingLength(arrayA); 
alert("After Using Length: " + arrayA.length); 

하는 중 : http://www.jsfiddle.net/8Yn7e/

때 기존 배열을 가리키는 변수를 설정하여 새로운 배열을 가리 키도록하십시오. 변수는 원래의 배열에 대한 링크를 끊는 것입니다.

당신이 array.length = 0 (그리고 예를 들어 array.splice(0, array.length) 같은 다른 방법)을 사용

, 원래의 배열을 비우는 실제로입니다.

+0

어느 브라우저에서 array.length = 0'을 지원하지 않습니까? – user2013

+1

@ArthaeyAngosii : Heh, 내가 아는 누구도. 명백하게 나는 naïve했고, 2011 년 1 월에 쓰레기와 함께 대답하는 것을 즐겼다. .. 그것을 지적하기위한 감사;). – Matt

0

정말로 효과가 있습니까?

여기에 약간의 실험을했는데 문자열로 Array를 "추가"하려고하면 문자열이 나타납니다.

function xyz(){ 
    var a = []; 
    alert(typeof(a+$("#first").html())); 
    // shows "string" 
} 

http://www.jsfiddle.net/4nKCF/

관련 문제