이전 단어
배열은 순서대로 배열 된 일련의 값이며, 객체의 속성 이름과 관련하여 순서대로 사용되지 않습니다. 기본적으로 배열은 숫자를 조회 키로 사용하고 객체에는 사용자 정의 속성 이름이 있습니다. JavaScript에는 실제 연관 배열이 없지만 객체는 연관 기능의 기능을 구현하는 데 사용할 수 있습니다.
Array ()는 단지 특수한 유형의 객체 ()입니다. 배열은 언제든지 업데이트하거나 삭제할 수있는 모든 유형의 값을 보유 할 수 있으며 배열의 크기는 동적으로 조정됩니다.
객체 외에도 배열 배열 유형은 아마도 JavaScript에서 가장 일반적으로 사용되는 유형 일 것입니다. 또한 JavaScript의 배열은 대부분의 다른 언어와는 상당히 다릅니다. 이 기사는 JavaScript의 배열 배열 유형을 소개합니다.
배열을 만듭니다
배열을 만드는 방법에는 두 가지가 있습니다 : 문자 구문 사용 및 Array () 생성자 사용
【오자】
배열 리터럴 사용은 배열을 만드는 가장 쉬운 방법입니다. 사각형 괄호가있는 쉼표가있는 어레이 요소
val empty = []; // 요소가없는 배열 var primes = [2,3,5,7,11]; // 5 값의 배열
JavaScript 배열은 다른 언어와 달리 다른 언어로 된 데이터 목록과 다른 언어로 된 데이터 목록이지만 JavaScript 배열의 각 항목은 모든 유형의 데이터를 보유 할 수 있습니다.
var misc = [1.1, true, "a"]; // 다른 유형의 3 가지 요소
배열 리터럴의 값은 상수 일 필요는 없으며 어떤 표현이 될 수 있습니다.
var base = 1024; var table = [base, base+1, base+2, base+3];
객체 리터럴 또는 다른 배열 리터럴을 포함 할 수 있습니다
var b = [[1, {x : 1, y : 2}], [2, {x : 3, y : 4}];배열의 요소가 여전히 배열 인 경우 다차원 배열이 형성됩니다.
var a = [[1, 2], [3, 4];
[참고] 숫자 리터럴 표기법을 사용할 때는 배열 생성자가 호출되지 않습니다.
【건설자】
생성자를 호출하는 방법에는 세 가지가 있습니다
parameters 없음, 빈 배열을 만듭니다
//이 메소드는 요소가없는 빈 배열을 만듭니다.이 방법은 배열의 직접 수량과 동일합니다 [] var a = new Array ();
【2 is 배열의 길이를 지정하는 데 사용되는 숫자 매개 변수가 있습니다.
var a = 새 배열 (10); console.log (a); // [] console.log (a [0], a.length); // 정의되지 않은 10
[참고] 다른 유형의 매개 변수가있는 경우 해당 값의 배열 만 포함 된 배열이 생성됩니다.
var a = new Array ('10 '); console.log (a); // ['10 '] console.log (a [0], a.length); // 10 1【3 there 여러 매개 변수가있는 경우 매개 변수는 배열의 특정 요소로 표시됩니다.
var a = 새 배열 (1,2,3); console.log (a); // [1,2,3] console.log (a [0], a [1], a [2]); // 1 2 3
Array () 생성자를 사용하는 경우 새 연산자를 생략 할 수 있습니다.
var a1 = array (); var a2 = array (10); var a3 = array (1,2,3); console.log (a1, a2, a3); // [] [] [1,2,3]
배열 자연
배열은 순서대로 배열 된 일련의 값입니다. 본질적으로 배열은 특수한 개체입니다.
타입 [1, 2, 3] // "Object"
배열의 특수성은 주요 이름이 순서대로 배열 된 정수 세트 (0, 1, 2…)라는 점에서 반영됩니다. 배열 멤버의 키 이름이 고정되어 있으므로 배열은 각 요소의 키 이름을 지정할 필요가 없지만 객체의 각 멤버는 키 이름을 지정해야합니다.
var arr = [ 'a', 'b', 'c']; console.log (object.keys (arr)); // [ "0", "1", "2"] var obj = {name1 : 'a', 'b', name3 : 'c'};배열은 특수한 형태의 객체입니다. 사각형 브래킷이있는 배열 요소에 액세스하는 것은 사각형 괄호가있는 물체의 속성에 액세스하는 것과 같습니다.
JavaScript 언어는 객체의 주요 이름이 문자열이라는 것을 규정하므로 배열의 주요 이름은 실제로 문자열입니다. 숫자 값으로 읽을 수있는 이유는 비 스트링 키 이름이 문자열로 변환 된 다음 속성 이름으로 사용되기 때문입니다.
o = {}; // 일반 객체를 만듭니다. o [1] = "one"; // 정수로 색인화 // 숫자 키 이름은 자동으로 문자열로 변환됩니다.그러나 배열 인덱스와 객체 속성 이름을 구별해야합니다. 모든 인덱스는 속성 이름이지만 0 ~ 232-2 (4294967294) 사이의 정수 속성 이름 만 인덱스입니다.
var a = []; // index a [ '1000'] = 'abc'; a [1000] // 'abc'// index a [1.00] = 6; a [1] // 6
[참고] 개별 값은 식별자로 사용할 수 없습니다. 따라서 배열 멤버는 사각형 괄호로 만 표현할 수 있습니다.
var arr = [1, 2, 3]; arr [0]; // 1arr.0; // syntaxerror
어레이는 음수 또는 비 지구 번호를 사용하여 인덱싱 될 수 있습니다. 그러나 32-2의 전력에 0 ~ 2의 범위 내에 있지 않기 때문에 배열의 인덱스가 아닌 배열의 속성 이름 일뿐입니다. 명백한 특징은 배열의 길이를 변경하지 않는다는 것입니다.
var a = [1,2,3]; // 속성 이름 a [-1.23] = true; console.log (a.length); // 3 // 색인 A [10] = 5; console.log (a.length); // 11 // 속성 이름 [ 'ABC'] = '테스트'; Console.log (A.length); // 11
드문 어레이
스파 스 배열은 0에서 시작하는 불연속 인덱스를 포함하는 배열입니다.
【1 most 희소 어레이를 만드는 가장 직접적인 방법은 삭제 연산자를 사용하는 것입니다.
var a = [1,2,3,4,5]; a [1]; console.log (a [1]); // undefinedConsole.log (1 in a); // false를 삭제합니다
【2 values 배열 쉼표 사이에서 요소 값을 생략 할 수 있으며 요소 값을 생략하여 드문 배열을 만들 수 있습니다.
var a = [1 ,, 3,4,5]; console.log (a [1]); // undefinedConsole.log (1 in a); // false
[참고] 생략 된 요소 값과 값이 정의되지 않은 요소 값 사이에는 차이가 있습니다.
var a = [1 ,, 3,4,5]; console.log (a [1]); // undefinedConsole.log (1 in a); // falsevar a = [1, undefined, 3,4,5]; console.log (a [1]); // undefinedconsole.log (1 in a); // true
배열 끝에서 쉼표를 사용하는 경우 브라우저간에 차이가 있습니다. 쉼표는 표준 브라우저에 의해 무시되고 IE8 브라우저는 끝에 정의되지 않은 값을 추가합니다.
// 표준 브라우저 출력 [1,2], IE8-Browser 출력 [1,2, undefined] var a = [1,2,]; console.log (a); // 표준 브라우저 출력 2, IE8-Browser 출력 3var a = [,,]; console.log (a.length);
충분히 희박한 배열은 일반적으로 구현이 빽빽한 배열보다 느리게 느리고 메모리 사용률이 높으며 이러한 배열에서 요소를 찾아야하는 시간은 일반 객체의 속성을 찾는 시간이 걸립니다.
배열 길이
각 배열에는 길이 속성이 있으며,이 속성은 기존 JavaScript 객체와 구별되는 속성입니다. 밀도 (즉, 비원이 아닌) 배열의 경우, 길이 속성 값은 배열의 요소 수를 나타내고 그 값은 배열에서 가장 큰 인덱스보다 1이 더 큽니다.
[] .length // => 0 : 배열에는 요소가 없습니다 [ 'a', 'b', 'c']. 길이 // => 3 : 최대 인덱스는 2이고 길이는 3입니다.
배열이 희소 배열 인 경우 길이 속성 값은 요소 수보다 큽니다. 마찬가지로 그 값은 배열에서 가장 큰 색인보다 1이 더 큽니다.
[,,].길이; //3(Array(10)) .length ;//10var a = [1,2,3]; console.log (a.length); // 3delete a [1]; console.log (a.length); // 3
배열의 특수성은 주로 배열의 길이를 동적으로 조정할 수 있다는 사실에 반영됩니다.
【1 you 값을 배열 요소에 할당하고 인덱스 I은 기존 배열의 길이보다 크거나 같으면 길이 속성의 값이 i+1으로 설정됩니다.
var arr = [ 'a', 'b']; arr.length // 2arr [2] = 'c'; arr.length // 3arr [9] = 'd';
【2 setting 길이 속성을 현재 길이보다 작은 비 음성 정수 N으로 설정할 때는 현재 배열 인덱스 값을 가진 요소가 N보다 삭제됩니다.
a = [1,2,3,4,5]; // 5 요소 배열에서 A.length = 3; // 이제 a는 [1,2,3] A.length = 0입니다. // 모든 요소를 삭제합니다. A는 [] A.length = 5이고; // 길이는 5이지만 새로운 요소가 없습니다.
배열 (5)
[참고] 배열을 지우는 효과적인 방법은 길이 속성을 0으로 설정하는 것입니다.
var arr = [ 'a', 'b', 'c']; arr.length = 0; arr // []
【3 the 배열의 길이 속성 값을 현재 길이보다 크게 설정합니다. 실제로 이것은 배열에 새 요소를 추가하지 않고 배열 끝에 빈 영역 만 생성합니다.
var a = [ 'a']; a.length = 3; console.log (a [1]); // undefinedConsole.log (1 in a); // false
길이가 불법 값으로 설정된 경우 (즉, 범위 0-232-2 외부의 값) JavaScript가 오류를보고합니다.
// 음수 값 설정 []. 길이 = -1 // 범위 서기 : 잘못된 배열 길이 // 배열 요소의 수는 32 []. length = math.pow (2,32) // rangeerrror : invalid array length // set string []. longth = 'abc'// 범위 층 길이 : invalid array 길이
배열은 본질적으로 객체이므로 배열에 속성을 추가 할 수 있지만 길이 속성의 값에는 영향을 미치지 않습니다.
var a = []; a [ 'p'] = 'abc'; console.log (a.length); // 0a [2.1] = 'abc'; console.log (a.length); // 0
어레이 트래버스
Loop for Loop을 사용하여 배열 요소를 통해 루프하는 가장 일반적인 방법
var a = [1, 2, 3]; for (var i = 0; i <a.length; i ++) {console.log (a [i]);}물론 while 루프를 사용할 수도 있습니다
var a = [1, 2, 3]; var i = 0; while (i <a.length) {console.log (a [i]); i ++;} var l = a.length; while (l-) {console.log (a [l]);}그러나 배열이 희소 배열 인 경우 a for loop을 사용하면 몇 가지 조건을 추가해야합니다.
// 존재하지 않는 요소를 건너 뜁니다 var var a = [1 ,,, 2]; for (var i = 0; i <a.length; i ++) {if (! (i in a)) 계속; console.log (a [i]);}희소 배열을 처리하기 위해 루프를 사용하거나 사용할 수도 있습니다. 루프는 열거 가능한 속성 이름 (배열 인덱스 포함)을 한 번에 루프 변수에 할당합니다. 존재하지 않는 지수는 가로 지르지 않습니다
var a = [1 ,,, 2]; for (var i in a) {console.log (a [i]);}for/in 루프는 array.prototype에 추가 된 메소드와 같은 상속 된 속성 이름을 열거 할 수 있기 때문입니다. 이러한 이유로, 추가 탐지 방법을 사용하지 않는 한, 원치 않는 특성을 필터링하는 경우가없는 경우.
var a = [1 ,,, 2]; ab = 'b'; for (a in a) {console.log (a [i]); // 1 2 'b'} // ivar a = [1 ,, 2]; ab = 'b'; a) {if (math.floor (math.abs (i))) 계속; console.log (a [i]); // 1 2}JavaScript 사양을 사용하면 루프가 다른 순서로 객체의 특성을 가로 질러야합니다. 일반적으로 배열 요소의 트래버스 구현은 오름차순 순서이지만 이와 같이 보장 할 수는 없습니다. 특히, 배열에 객체 속성과 배열 요소가 모두있는 경우 리턴 된 속성 이름은 숫자 크기의 순서 대신 생성 된 순서로 가능합니다. 알고리즘이 트래버스 순서에 의존하는 경우, 사용하지 않고 루프에 정기적으로 사용하는 것이 가장 좋습니다.
클래스 배열
길이 속성과 해당 비 음성 정수 속성을 가진 객체를 배열과 같은 객체라고합니다.
// 클래스 배열 데모 var a = {}; var i = 0; while (i <10) {a [i] = i*i; i ++;} a.length = i; var total = 0; for (var j = 0; j <a.length; j ++) {Total+= a [j];}세 가지 공통 클래스 배열 객체가 있습니다.
【1 uments 인수 객체
// 인수 객체 함수 argss () {return arguments} var arraylike = args ( 'a', 'b'); arraylike [0] // 'a'arraylike.length // 2arraylike array // falsedom dom method에 의해 반환 된 객체 (예 : document.getEmentsByTagName () 메소드)
// dom element var elts = document.getElementsByTagName ( 'h3'); elts.length // 3elts 인스턴스 array // false
【3. 문자열
// String 'abc'[1] // 'b'abc'.length // 3'abc'배열 인스턴스 // false
[참고] 문자열은 불변의 값이므로 배열로 볼 때 읽기 전용입니다. 예를 들어, push (), sort (), reverse (), splice () 및 기타 배열 메소드는 배열을 수정합니다. 그들은 문자열에 무효이며 오류를보고합니다.
var str = 'abc'; array.prototype.foreach.call (str, function (chr) {console.log (chr); // abc}); array.prototype.splice.call (str, 1); console.log (str); // typeerror : [Object String]의 속성 '2'를 삭제할 수 없습니다.배열의 슬라이스 메소드는 클래스 배열 객체를 실제 배열로 바꿉니다.
var arr = array.prototype.slice.call (배열);
JavaScript 배열 메소드는 일반적으로 일반적인 것으로 정의되므로 실제 배열뿐만 아니라 클래스 배열 객체에서도 올바르게 작동합니다. ECMAScript5에서는 모든 배열 방법이 일반적입니다. ECMAScript3에서는 toString () 및 tolocalestring ()을 제외한 모든 방법이 일반적입니다.
var a = { '0': 'a', '1': 'b', '2': 'c', length : 3}; array.prototype.join.call (a, '+'); // 'a+b+c'array.prototype.slice.call (a, 0); // ['a ','b ','c ' x.touppercase ();}); // [ 'a', 'b', 'c']