itsource

JavaScript 배열을 선언할 때 "Array()"와 "[]"의 차이점은 무엇입니까?

mycopycode 2023. 1. 8. 14:40
반응형

JavaScript 배열을 선언할 때 "Array()"와 "[]"의 차이점은 무엇입니까?

다음과 같은 어레이를 선언하는 경우의 실제 차이점은 무엇입니까?

var myArray = new Array();

그리고.

var myArray = [];

차이는 있지만, 그 예에서는 차이가 없습니다.

더 표현으로 ''라고 표현하면요.new Array()에는 파라미터에 1개의 추가 옵션이 있습니다.컨스트럭터에 번호를 전달하면 해당 길이의 배열을 얻을 수 있습니다.

x = new Array(5);
alert(x.length); // 5

어레이를 작성하는 다양한 방법을 설명하려면:

var a = [],            // these are the same
    b = new Array(),   // a and b are arrays with length 0

    c = ['foo', 'bar'],           // these are the same
    d = new Array('foo', 'bar'),  // c and d are arrays with 2 strings

    // these are different:
    e = [3]             // e.length == 1, e[0] == 3
    f = new Array(3),   // f.length == 3, f[0] == undefined

;

다른 으로는 '하다'를 할 때, '다'를 사용할 때'라는 것입니다.new Array()스택 크기에 영향을 주는 어레이 크기를 설정할 수 있습니다.이는 스택 오버플로(어레이 성능)가 발생할 때 유용합니다.push vs Array.unshift)는 어레이의 크기가 스택의 크기를 초과하여 다시 작성해야 하는 경우에 발생하는 현상입니다.따라서 실제로 사용 사례에 따라 사용 시 성능이 향상될 수 있습니다.new Array()오버플로를 막을 수 있기 때문입니다.

답변에서 지적된 바와 같이,new Array(5) 않습니다.undefined항목을 배열에 추가합니다.5개의 아이템을 수납할 수 있는 공간을 추가할 수 있습니다.해 주십시오.Array array.length계산을 위해.

암묵적인 어레이를 사용하여 어레이를 작성하는 것과 어레이 생성자의 차이는 미묘하지만 중요합니다.

다음을 사용하여 어레이를 생성하는 경우

var a = [];

인터프리터에게 새 런타임 배열을 생성하도록 지시합니다.추가 처리는 전혀 필요 없습니다.다 했어요.

다음을 사용하는 경우:

var a = new Array();

아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.Array오브젝트를 생성합니다.그런 다음 실행 컨텍스트를 검색하여 호출할 컨스트럭터를 찾고 호출하여 어레이를 만듭니다.

여러분은 "음, 이건 전혀 중요하지 않아.똑같아!유감스럽게도 당신은 그것을 장담할 수 없습니다.

다음 예를 들어 보겠습니다.

function Array() {
    this.is = 'SPARTA';
}

var a = new Array();
var b = [];

alert(a.is);  // => 'SPARTA'
alert(b.is);  // => undefined
a.push('Woa'); // => TypeError: a.push is not a function
b.push('Woa'); // => 1 (OK)

위의 예에서 첫 번째 콜은 예상대로 'SPARTA'에 경고를 보냅니다.두번째는 그렇지 않을 것이다.정의되지 않은 상태로 표시됩니다. b에는 배열 예: b에 b에음음음음음음 functions functions functions functions functions functions functions functions functions functions such such such such such such such such such such such such such such such such such such such such such such such such such)가 push다른 한쪽은 그렇지 않은 경우.

될 라고 예상할 수 , '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.[] 않다new Array().

그냥 사용하는 것이 가장 좋을 것 같습니다.[]어레이를 원하는 것을 알고 있다면 말이죠.어레이를 재정의하는 것도 권장하지 않습니다.

아직 답이 나오지 않은 중요한 차이가 있다.

여기서부터:

new Array(2).length           // 2
new Array(2)[0] === undefined // true
new Array(2)[1] === undefined // true

'아까부터'라고 도 있습니다.new Array(2) [undefined, undefined]하지만 그렇지 않아요!

이번에는 ㄹ게요.map():

[undefined, undefined].map(e => 1)  // [1, 1]
new Array(2).map(e => 1)            // "(2) [undefined × 2]" in Chrome

봤지? 의미가 완전히 다르잖아!그런데 왜?

22. ES6의 .1.1.2이다.Array(len)는, 속성 「」을 입니다.length되어 있습니다.len이것으로 끝입니다.즉, 새로 생성된 어레이에는 실제 요소가 없습니다.

★★map() 22..1.3.15를 확인합니다.HasProperty콜백에 콜백합니다만, 결과는 다음과 같습니다.

new Array(2).hasOwnProperty(0) // false
[undefined, undefined].hasOwnProperty(0) // true

그렇기 때문에 에서 작성된 어레이에서는 반복 기능이 정상적으로 동작할 수 없습니다.

BTW, Safari 및 Firefox는 이 상황에서 훨씬 더 나은 "인쇄" 기능을 제공합니다.

// Safari
new Array(2)             // [](2)
new Array(2).map(e => 1) // [](2) 
[undefined, undefined]   // [undefined, undefined] (2) 

// Firefox
new Array(2)             // Array [ <2 empty slots> ]
new Array(2).map(e => 1) // Array [ <2 empty slots> ]
[undefined, undefined]   // Array [ undefined, undefined ]

저는 이미 Chromium에 문제를 제출했고, 이 혼란스러운 인쇄를 수정해 달라고 요청했습니다.https://bugs.chromium.org/p/chromium/issues/detail?id=732021

업데이트: 이미 수정되었습니다.Chrome은 현재 다음과 같이 인쇄됩니다.

new Array(2)             // (2) [empty × 2]

new Array(size)입니다.[](배열을 만들고 채워 측정) FF 및 IE에서도 거의 동일합니다.어레이의 대략적인 크기를 알고 있는 경우에만 문제가 됩니다.지정한 길이보다 많은 항목을 추가하면 성능 향상 효과가 사라집니다.

more다 more more more:Array(는 메모리를하지 않는 는 메모리를 할당하지 않습니다.[]는 유형 및 값을 설정하는 선형 시간 연산입니다.

상세한 것에 대하여는, 다음의 페이지를 참조해 주세요.new Array()

쓸 요.new Object()자바스크립트 리터럴을 합니다.{} 이렇게 사용하지 .new Array() 리터럴을 [] 다르게 혼란스러울 수 .JavaScript의 배열은 Java의 배열과 전혀 다르게 동작하며 Java와 유사한 구문을 사용하면 혼란스러울 수 있습니다.

「 」를하지 주세요.new Number,new String , 「」new Boolean래퍼를 생성합니다.이러한 폼은 불필요한 오브젝트래퍼를 생성합니다.대신 간단한 리터럴을 사용하세요.

.- '코멘트'new Array(length)폼은 유용한 목적을 제공하지 않습니다(최소한 오늘날의 JavaScript 구현에서는).

더 잘 [] ★★★★★★★★★★★★★★★★★」new Array():

> []
  []
> new Array()
  []
> [] == []
  false
> [] === []
  false
> new Array() == new Array()
  false
> new Array() === new Array()
  false
> typeof ([])
  "object"
> typeof (new Array())
  "object"
> [] === new Array()
  false
> [] == new Array()
  false

위의 결과는 Windows 7의 Google Chrome 콘솔에서 얻은 것입니다.

첫 번째는 기본 오브젝트 컨스트럭터 호출입니다.원한다면 매개 변수를 사용할 수 있습니다.

var array = new Array(5); //initialize with default length 5

두 번째는 비어 있지 않은 배열을 작성하는 기능입니다.

var array = [1, 2, 3]; // this array will contain numbers 1, 2, 3.

프레드리크의 좋은 예를 바탕으로 한 이 예부터 좀 더 구체적으로 설명할 수 있습니다.

var test1 = [];
test1.push("value");
test1.push("value2");

var test2 = new Array();
test2.push("value");
test2.push("value2");

alert(test1);
alert(test2);
alert(test1 == test2);
alert(test1.value == test2.value);

어레이에 다른 가치를 추가하여 다음 4가지 경고를 했습니다.첫 번째와 두 번째는 각 배열에 저장된 값을 제공하여 값을 확인하는 것입니다.그들은 똑같이 돌아올 거야!이제 세 번째 것을 시도해 보세요, 거짓으로 반환됩니다. 왜냐하면

JS는 test1을 배열의 데이터 유형을 가진 변수로 취급하고 test2배열의 기능을 가진 개체로 취급하며, 여기에는 약간의 차이가 있습니다.

첫 번째 차이점은 test1이 아무 생각 없이 변수를 호출하면 해당 데이터 유형을 무시하고 이 변수에 저장된 값이 반환된다는 것입니다.단, test2를 호출하면 Array() 함수가 호출되어 "Pushed" 값이 "Value" 속성에 저장됩니다.또한 test2에 경고하면 어레이 객체의 "Value" 속성이 반환됩니다.

따라서 test1이 test2와 동일한지 여부를 확인해도 true는 반환되지 않습니다.한쪽은 함수이고 다른 한쪽은 변수(배열 유형 포함)입니다.이 값은 같은 경우에도 마찬가지입니다.

이를 확인하기 위해 .value를 추가한 4번째 경보를 시도합니다. 그러면 true가 반환됩니다.이 경우 JS에게 "용기의 종류에 관계없이 함수든 변수든 각 용기에 저장된 값을 비교하여 무엇을 보았는지 알려주십시오!"라고 말합니다.

그 이면에 있는 생각을 분명히 말했으면 좋겠고, 영어를 잘 못해서 미안해.

길이를 지정하지 않고 어레이를 초기화해도 차이가 없습니다. ★★★★★★★★★★★★★★★★★.var a = []&var b = new Array()습니니다

이렇게 긴요.var b = new Array(1);어레이 오브젝트의 길이를 1로 설정합니다. ,에 하는 거죠.var b = []; b.length=1;

이는 array_object를 실행할 때마다 문제가 됩니다.push, 마지막 요소 뒤에 항목을 추가하고 길이를 늘립니다.

var b = new Array(1);
b.push("hello world");
console.log(b.length); // print 2

var v = [];
a.push("hello world");
console.log(b.length); // print 1

보이는 것 이상의 것이 있습니다.다른 대부분의 답변은 맞지만..

new Array(n)

  • 에서 ""의 할 수 .n
  • 어레이 작성에 최적화
  • 생성된 어레이는 스파스로 표시되며, 이는 각 인덱스 액세스가 경계를 확인하고 값이 존재하는지 확인하고 프로토타입 체인을 사용해야 하기 때문입니다.
  • 어레이가 스파스로 표시되어 있으면 (최소한 V8에서는) 원래대로 되돌릴 수 없습니다.컨텐츠(팩 어레이)를 1ms 또는 2시간 후에 채워도 라이프 타임 동안 항상 느려집니다.

[1, 2, 3] || []

  • 작성된 어레이는 (사용하지 않는 한) 패킹으로 표시됩니다.delete ★★★★★★★★★★★★★★★★★」[1,,3]syntax의 개요)
  • 어레이 조작에 최적화(for ..,forEach,map 의 개요)
  • 어레이 증가에 따라 엔진에서 공간을 재할당해야 함

오래된 브라우저 버전/브라우저에는 해당되지 않을 수 있습니다.

첫 번째는 기본 오브젝트 컨스트럭터 콜입니다.대부분 다이내믹 값에 사용됩니다.

var array = new Array(length); //initialize with default length

두 번째 배열은 정적 값을 생성할 때 사용됩니다.

var array = [red, green, blue, yellow, white]; // this array will contain values.

사용의 차이

var arr = new Array(size);

또는

arr = [];
arr.length = size;

이 질문에서 충분히 논의되었듯이.

속도 문제를 추가하고 싶습니다. 현재 가장 빠른 방법인google chrome두 번째입니다.

그러나 업데이트에 따라 이러한 사항이 크게 달라지는 경향이 있습니다.또한 실행 시간은 브라우저마다 다릅니다.

를 들어,한 두 번째 은 ops/second, ops/second의 경우second]로됩니다.chromemozilla dev.2300만이라는 놀라운 비율을 얻을 수 있습니다.

어쨌든 가끔 다른 브라우저(및 머신)에서 사이트를 사용하여 체크하는 것이 좋습니다.

code1과 같은 슬라이스(또는 어레이의 다른 기능)를 찾을 수 있는 차이점을 알고 있습니다. code2는 u 어레이와 그 인스턴스를 나타냅니다.

코드 1:

[].slice; // find slice here
var arr = new Array();
arr.slice // find slice here
Array.prototype.slice // find slice here

코드2:

[].__proto__ == Array.prototype; // true
var arr = new Array();
arr.__proto__ == Array.prototype; // true

결론:

[] ★★★★★★★★★★★★★★★★★」new Array()어레이의 새 인스턴스를 만듭니다.그리고 모두 시제품의 기능을Array.prototype

so의 에 의해, 어레이의 「」이유가 됩니다.소우이것에 의해, 이유는 설명됩니다.[] != []

:)

큰 차이는 없습니다. 기본적으로 동일한 작업을 수행하지만 다른 방식으로 작업을 수행하지만 W3C에서 다음 내용을 읽어 보십시오.

var cars = ["Saab", "Volvo","BMW"];

그리고.

var cars = new Array("Saab", "Volvo", "BMW");

을 사용하다새로운 어레이()를 사용할 필요가 없습니다.
단순성, 가독성 및 실행 속도를 위해 첫 번째 방법(어레이 리터럴 방식)을 사용합니다.

동시에 '를 사용하여 를 작성한다.new Array「 」 「 」 、 「 」

새로운 어레이()를 피합니다.

JavaScript의 새로운 Array()에 대해 설명합니다.
을[를] 사용하다
두 포인트라는 빈 .

var points = new Array();         // Bad
var points = [];                  // Good 

이 두 개의 다른 문장은 모두 6개의 숫자를 포함하는 새로운 배열을 만듭니다.

var points = new Array(40, 100, 1, 5, 25, 10); // Bad    
var points = [40, 100, 1, 5, 25, 10];          // Good

새로운 키워드는 코드만 복잡하게 만듭니다.또한 다음과 같은 예기치 않은 결과가 발생할 수 있습니다.

var points = new Array(40, 100);  // Creates an array with two elements (40 and 100)

요소 중 하나를 제거하면 어떻게 됩니까?

var points = new Array(40);       // Creates an array with 40 undefined elements !!!!!

으로는 베스트 프랙티스로 되지 않고, 또 , 를 따따 length length length length length to to to to to length length length length 로 넘길 수 .을 사용법길이를 다음 주소로 넘길 수 있습니다.new Array(length)이렇게 하는 것도 권장하지 않는 방법입니다.

[ ] 를 사용하여 이상한 행동을 한 적이 있습니다.

일부 값이 초기화된 필드가 있는 모델 "클래스"가 있습니다.예:

require([
  "dojo/_base/declare",
  "dijit/_WidgetBase",
], function(declare, parser, ready, _WidgetBase){

   declare("MyWidget", [_WidgetBase], {
     field1: [],
     field2: "",
     function1: function(),
     function2: function()
   });    
});

가 드드ised로 되었을 때[]이치하나를 변경하면 다른 모든 항목에 영향을 미칩니다.

이 조작은, 다음과 같이 초기화할 수 없습니다.new Array()(. 체체 of of of of . . . . . . . . . . . . . . . .){} 신규 vs 것것Object())

TBH 사용하던 프레임워크에 문제가 있는지는 잘 모르겠습니다(도조).

②번.var x = new Array()var x = []그 중 가장 유용한 두 가지를 설명하겠습니다.

전에 먼저 . 를 들어 '차이 설명'을 사용할 는요.x = []는 Array의 데이터 유형을 사용하여 새로운 변수를 정의하고 어레이 프로토타입에 속하는 모든 메서드를 상속합니다.이것은 클래스 확장과 거의 비슷하지만(정확하지는 않습니다). ,를 사용할 는 however however however however howeverx = new Array() 에 합니다.x.

이제 무엇이 다른지 봅시다.

번째 차이점은 다음과 같습니다.new Array(x)서 ''는x이며, 정수(으)의 합니다.x되어 있지 않은(예: 「」등).new Array(16)는 16개의 항목이 모두 정의되지 않은 배열을 초기화합니다.이는 미리 정의된 길이의 배열을 비동기적으로 채울 때 매우 유용합니다.예를 들어 (again : )의 경우 100개의 경쟁업체 결과를 리모트 시스템 또는 DB에서 비동기적으로 수신하고 있으며 각 결과를 수신한 후 순위에 따라 어레이에 할당해야 합니다.요.myArray[result.rank - 1] = result.name1로 0으로 하다

번째 차이점은 다음과 같습니다.new Array()이미 알고 있듯이 어레이 프로토타입의 완전히 새로운 클론을 설치하고 변수에 할당합니다.이것에 의해, 몇개의 매직(권장되지 않는 btw)을 실행할 수 있습니다.이 매직은 레거시 배열 메서드의 특정 메서드를 덮어쓸 수 있다는 것입니다.예를 '어울리다'를 할 수 .Array.pushmethod를 사용하여 새로운 값을 어레이의 선두에 푸시할 수 있습니다.또한 어레이 프로토타입의 이 특정 클론에 새로운 메서드를 추가할 수도 있습니다(이것이 더 좋습니다).이것에 의해, 독자적인 메서드를 추가해, 프로젝트 전체에서 보다 복잡한 타입의 어레이를 정의하고, 클래스로 사용할 수 있습니다.

을 가지는 진심으로 하는 사람)이라면, 결코 않을 입니다.new Array())) 요 、 요 、 ) 、 ) 、 )))))) 。

에 대한 .new Array()

약속을 하면서 차이를 발견했어요.약속 배열(arr, arr=[]로 초기화)을 사용하는 동안 Promise.all(arr)에 오류가 발생했습니다.반면 arr = Array()로 선언된 경우에는 컴파일 문제가 발생하지 않았습니다.이게 도움이 됐으면 좋겠다.

나를 괴롭힌 두 공사 사이에 한 가지 차이점을 발견했어.

예를 들어 다음과 같습니다.

function MyClass(){
  this.property1=[];
  this.property2=new Array();
};
var MyObject1=new MyClass();
var MyObject2=new MyClass();

실제로 이렇게 하면

MyObject1.property1.push('a');
MyObject1.property2.push('b');
MyObject2.property1.push('c');
MyObject2.property2.push('d');

결론은 다음과 같습니다.

MyObject1.property1=['a','c']
MyObject1.property2=['b']
MyObject2.property1=['a','c']
MyObject2.property2=['d']

에서는 어떤 수의 오브젝트에 하려면 , 「」를할 필요가 있습니다.new Array().

배열 생성자를 사용하여 원하는 길이의 새 배열을 만들고 각 인덱스를 정의되지 않은 것으로 채우면 변수에 할당된 배열이 사용자가 정보를 제공하는 인덱스를 만듭니다.

언급URL : https://stackoverflow.com/questions/931872/what-s-the-difference-between-array-and-while-declaring-a-javascript-ar

반응형