[javascript] Javascript로 배열을 선언 할 때 따라야 할 모범 사례는 무엇입니까?

새 배열을 선언해야 할 때이 표기법을 사용합니다

var arr = new Array();

그러나 온라인 (예 : jsbin) 을 테스트 할 때 “배열 리터럴 표기법 [] 사용”이라는 경고 메시지가 표시됩니다.

생성자를 사용하지 않는 이유를 찾지 못했습니다. 어떤 방법으로 사용하는 것보다 덜 효율적 []입니까? 아니면 나쁜 습관입니까?

var arr = [];대신 사용해야 할 이유가 var arr = new Array();있습니까?



답변

대부분 사람들이 사용 var a = []하기 때문에 더글러스 크록 포드는 이렇게 말한다 .

그의 이유는 다음과 같은 비 직관적이고 일관되지 않은 행동을 포함합니다 new Array().

var a = new Array(5);     // an array pre-sized to 5 elements long
var b = new Array(5, 10); // an array with two elements in it

미리 지정된 숫자 요소가 하나만new Array() 있는 배열을 만들 수있는 방법이 없습니다 .

[]실제로 사용하는 것이 더 효율적 이고 안전합니다 ! Array생성자 를 덮어 써서 이상하게 만들 수는 있지만의 동작을 덮어 쓸 수는 없습니다 [].

개인적으로 나는 항상 구문을 []사용하고 마찬가지로 항상 {}대신 구문을 사용 합니다 new Object().


답변

한 가지 중요한 차이점은이 []것입니다 항상 반면, 새로운 배열을 인스턴스화 new Array할 수있는 다른 개체를 만드는 납치 .

(function () {
    "use strict";
    var foo,
        bar;
    //don't do this, it's a bad idea
    function Array() {
        alert('foo');
    }
    foo = new Array();
    bar = [];
}());​

내 예제 코드에서는 Array함수를 나머지 문서 범위에서 숨겨 두었 습니다. 그러나 이런 종류의 문제가 발생하면 코드가 잘 닫히지 않았을 가능성이 높습니다. 찾기가 어려울 수 있습니다.

면책 조항 : Array생성자 를 납치하는 것은 좋지 않습니다 .


답변

유지 관리를 위해 []

배열 리터럴은 대부분의 개발자가 사용하므로 예측하기 쉽습니다. 대부분의 배열 사용법은 리터럴을 사용하며 다른 개발자가 사용하는 코드와 코드를 일치시키는 데 가치가 있습니다.

빈 배열의 경우 []

var ns = [];
var names = [ 'john', 'brian' ];

여기 에 표시된 것처럼 , 비어 있고 알려진 몇 개의 요소에 리터럴을 사용하는 것은 Array 생성자보다 더 뚱뚱합니다.

알려진 크기의 배열의 경우 new Array(size)

크기를 알면 Array 생성자를 사용하면 성능이 크게 향상됩니다. 그러나 그것은 또한 이미 모든 값을 채우는 ‘정의되지 않은’배열을 처리해야한다는 것을 의미합니다.

여기에 표시된대로

// fill an array with 100 numbers
var ns = new Array( 100 );
for ( var i = 0; i < 100; i++ ) {
    ns[i] = i;
}

이것은 매우 작은 배열 에도 작동합니다 .


답변

아니요, 실제로 빈 배열에 다른 표기법을 사용할 이유가 없습니다.

그러나 대부분의 브라우저 x = [];Constructor를 호출하는 것보다 약간 더 나은 성능을 보여줍니다 .

특정 크기와 배열을 작성해야하는 경우, 종류의 필요 사용에 x = new Array(10);10 개 배열을 만들 것입니다 예를 들어, undefined슬롯.


답변

  • var arr = []은 배열 / 객체 리터럴을 사용합니다
  • var arr = new Array ()는 배열 / 객체 생성자를 사용합니다

생성자를 호출 할 필요가 없기 때문에 배열이나 객체를 정의하는 가장 빠른 방법은 문자 그대로입니다.

var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];

alert(arr1[0]); // 1
alert(arr2[0]); // 1

var arr3 = new Array(200);
var arr4 = [200];

alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200


답변

둘 다 맞습니다. 하지만 대부분의 사람들은var a = []

JavaScript에서 배열을 선언하는 세 가지 방법

방법 1 : JavaScript “new”키워드를 사용하여 배열을 메모리에 명시 적으로 선언하여 배열을 메모리에 인스턴스화 (즉, 생성하여 사용 가능하게 함) 할 수 있습니다.

// Declare an array (using the array constructor)
var arlene1 = new Array();
var arlene2 = new Array("First element", "Second", "Last");

방법 2 : 우리는 대체 방법을 사용하여 배열을 선언합니다.

// Declare an array (using literal notation)
var arlene1 = [];
var arlene2 = ["First element", "Second", "Last"];

방법 3 : JavaScript를 사용하면 특정 메서드를 호출하여 간접적으로 배열을 만들 수도 있습니다.

// Create an array from a method's return value
var carter = "I-learn-JavaScript";
var arlene3 = carter.split("-");


답변

생성자가 인수로 취할 수있는 한계가 있습니다.

대부분의 시스템에서 한계는 2 ^ 16 (2 바이트)입니다.

var myFreshArr = new Array(0,1,2,3 ..... 65536);

오류가 발생합니다 (너무 많은 인수 ….)

리터럴 []을 사용하면 그러한 문제가 없습니다.

큰 배열에 신경 쓰지 않는다면 원하는 것을 사용할 수 있다고 생각합니다.