JavaScript에서 배열은 배열 생성자를 사용하여 생성하거나 []를 사용하여 빠르게 생성 할 수 있으며, 이는 선호하는 방법입니다. 배열은 객체에서 상속 된 프로토 타입이며 Typeof에 대한 특수 반환 값이 없으며 '개체'만 반환합니다.
1. array.prototype.slice 메소드
배열의 슬라이스 방법은 일반적으로 배열에서 조각을 추출하는 데 사용됩니다. 그러나 "클래스 어레이"(인수 및 htmlcollection)를 실제 배열로 변환 할 수 있습니다.
코드 사본은 다음과 같습니다.
var nodesarr = array.prototype.slice.call (document.forms);
var argsarr = array.prototype.slice.call (인수);
왜 슬라이스 어레이 방법이 그러한 기술을 가지고 있는지 궁금했으며 JavaScript 엔진에서 어떻게 구현됩니까? 슬라이스의 형제 방법이 그러한 기술을 가지고 있습니까?
호기심으로 Google의 V8 JavaScript 엔진 소스 코드를 로컬 영역으로 다운로드하십시오. V8 소스 코드의 다운로드 주소는 https://github.com/v8/v8입니다.
v8-master/src/array.js에서 "array.prototype.slice"를 찾으십시오.
코드 사본은 다음과 같습니다.
함수 ArraySlice (시작, 끝) {
check_object_coercible (this, "array.prototype.slice");
...
var result = []; //이 문장이 핵심입니다
if (end_i <start_i) 반환 결과;
if (usearsevariant (array, len, is_array (array), end_i -start_i) {
...
sparseslice (array, start_i, end_i -start_i, len, result);
} 또 다른 {
simpleslice (array, start_i, end_i -start_i, len, result);
}
...
반환 결과;
그런 다음 "클래스 배열"을 호출하는 simpleslice 메소드를 사용한 다음 소스 코드에서 "SimplesLice"를 검색하고 SimplesLice 메소드가 Array.Prototype.splice의 소스 코드에서 호출되며 결과 변수도 빈 배열로 초기화된다는 것을 발견했습니다. 그러나 스플 라이스 메소드를 사용하여 "클래스 어레이"를 실제 배열로 변환하려면 시작 위치 매개 변수를 0으로 전달해야합니다.
코드 사본은 다음과 같습니다.
var nodesarr = array.prototype.splice.call (document.forms, 0);
구현 원칙은 삭제 된 배열 항목에 의해 새 배열을 형성하는 것입니다. 관심이 있으시면 array.prototype.splice의 소스 코드 구현을 확인할 수 있습니다.
또한 슬라이스는 배열을 복제 할 수도 있습니다.
코드 사본은 다음과 같습니다.
var arr = [1, 2, 3];
var clonearr = arr.slice (); // clonearr : [1, 2, 3]
2. array.prototype.push 메소드
푸시 메소드를 사용하여 어레이를 병합하십시오.
코드 사본은 다음과 같습니다.
var arr1 = [1, 'str', {이름 : 'lang'}];
var arr2 = [2, 'ing'];
Array.prototype.push.Apply (ARR1, ARR2);
// 반환 결과 : [1, "str", {이름 : 'lang'}, 2, "ing"]
3. array.prototype.sort 메소드
먼저 코드 업로드 :
코드 사본은 다음과 같습니다.
var arr = [ '1', '2', '10', '12'];
arr.sort ();
// 결과 : [ "1", "10", "12", "2"]]]
위의 결과는 일반적으로 우리가 원하는 것이 아니므로 수치 적 크기로 어떻게 분류합니까?
코드 사본은 다음과 같습니다.
arr.sort (function (a, b) {
반환 a -b;
})
// 결과 : [ "1", "2", "10", "12"]]]
정렬 비교 기능을 사용하면 많은 비교기를 사용자 정의하여 개인화 된 정렬을 달성 할 수 있습니다.
4. 길이 속성
배열의 길이 속성은 읽기 전용이 아니므로 작성할 수 있습니다. 예를 들어, 길이 속성을 사용하여 배열을 자릅니다.
코드 사본은 다음과 같습니다.
var arr = [1, 2, 3, 4];
arr.length = 2;
// arr : [1, 2]
arr.length = 0;
// arr : []
동시에, 길이 속성이 증가하면 배열의 길이 값이 증가하고 정의되지 않은 채우기가 새로운 요소로 사용됩니다.
코드 사본은 다음과 같습니다.
var arr = [];
arr.length = 3;
// arr : [정의되지 않은, 정의되지 않은, 정의되지 않은]
좋아요, 오늘 끝내자. 이미 이른 아침입니다. 앞으로 새로운 발견이 있으면 여기에 추가 할 것입니다.
전에는 블로그를 작성하는 습관이 없었지만 평범한 요약을 YouDaoyun의 메모에 넣는 데 익숙했습니다. 나는 다른 사람들이 그것을 더 잘 이해할 수 있도록 그것을 표현하는 방법을 고려해야했기 때문에 내 견해를 작성하는 것이 약간의 생각이 필요하지 않을 것이라고 기대하지 않았습니다.
당신이 잘못된 표현이나 잘못된 이해가 있다면, 나는 모두가 당신을 수정하도록 도와 줄 수 있기를 바랍니다.
또한 일반적으로 사용되는 일부 JavaScript 배열 메소드도 첨부했습니다
concat ()는 둘 이상의 배열을 연결하고 결과를 반환합니다.
join () () 배열의 모든 요소를 문자열에 넣습니다. 요소는 지정된 구분자로 분리됩니다.
팝 () 배열의 마지막 요소를 삭제하고 반환합니다.
푸시 ()는 배열 끝에 하나 이상의 요소를 추가하고 새 길이를 반환합니다.
Reverse () reverse ()는 배열에서 요소 순서를 뒤집습니다.
Shift () 배열의 첫 번째 요소를 삭제하고 반환합니다.
슬라이스 () () 선택한 요소를 기존 배열에서 반환합니다
정렬 () 배열의 요소를 정렬합니다
Splice ()는 요소를 삭제하고 배열에 새로운 요소를 추가합니다.
tosource () 객체의 소스 코드를 반환합니다
ToString ()은 배열을 문자열로 변환하고 결과를 반환합니다.
Tolocalestring ()은 배열을 로컬 어레이로 변환하고 결과를 반환합니다.
UNSHIFT ()는 배열의 시작 부분에 하나 이상의 요소를 추가하고 새 길이를 반환합니다.
valuef ()는 배열 객체의 원래 값을 반환합니다