Development Tip

Array.length = 0과 Array = []의 차이점은 무엇입니까?

yourdevel 2020. 11. 8. 11:22
반응형

Array.length = 0과 Array = []의 차이점은 무엇입니까?


두 사람의 개념적 차이점을 설명 할 수 있습니까? 두 번째 배열이 기존 배열에 대한 모든 참조를 파괴하여 새 배열을 만들고 .length = 0은 배열을 비우는 곳을 읽으십시오. 하지만 내 경우에는 작동하지 않았습니다.

//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 =[]의 장소에서 arr.length=0그것을 잘 작동합니다. 누구든지 여기서 무슨 일이 일어나고 있는지 설명 할 수 있습니까?


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] []

arr.length =0;// expected to empty the array

그리고 적어도 처음에는 배열을 비 웁니다. 이 작업을 처음 수행 한 후 :

arr = arr + $(this).html();

… 배열을 문자열로 덮어 씁니다 .

length문자열 속성은 읽기 전용이므로 할당 0해도 효과가 없습니다.


여기에서의 차이점은 다음 예제에서 가장 잘 설명됩니다.

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)를 들어 다른 방법) 을 사용할 때 실제로 원래 배열을 비우는 것입니다.


정말 작동합니까?

I did a little experiment here, and trying to "add" an Array with a String resulted in a string.

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

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

(tested in Opera 11)

참고URL : https://stackoverflow.com/questions/4804235/difference-between-array-length-0-and-array

반응형