저는 3년 넘게 JavaScript를 사용해왔지만 객체, 배열 등 일부 세부 사항에 대해서는 아직 거의 알지 못하며 가장 기본적인 몇 가지 작업만 사용해 왔습니다. 이것은 제가 공부할 때 가지고 있는 나쁜 습관입니다. 저는 게으른 편이라 좀 더 복잡한 논리를 보면 이해가 안 되는 게 많아요. ASP를 배울 때 ASP와 스크립트의 관계를 모르고, html을 배울 때 DOM이 무엇인지 모르듯이... 그러다 보니 탄탄하지 않고 천천히 배우다가 그만 두게 됩니다. 약간 복잡한 문제에 직면했을 때 학습합니다(너무 멀리 가고 있습니다).
오늘도 스크립트를 계속 최적화하다가 일부 배열을 병합하려고 할 때 문제가 발생하여 매뉴얼을 주의 깊게 읽고 몇 가지 테스트를 수행했습니다.
Javascript 1.2 이상에서는 []를 사용하여 배열을 만들 수 있습니다.
var firstArray = []
var secondArray = ["red", "green", "blue" ];
var thirdArray = [,,,,];
배열이 생성된 후 요소를 추가할 수 있습니다:
secondArray[4] = 28;
이렇게 결과는 4번째 요소와 2번째 요소 사이에 1개의 빈 요소가 됩니다.
결과는 다음과 유사합니다: ["red", "green", "blue",,28]
배열을 초기화해야 한다는 점에 유의해야 합니다. 배열 정의를 테스트했습니다. element:
var arrArray = [[]];
원래는 2차원 배열 구현을 구상했지만 결과적으로 i>에서는 arrArray[i][0]을 사용할 수 없습니다. 0!
자세히 살펴본 후 arrArray[0]는 실제로 빈 배열로 정의되어 있고 다른 요소는 정의되지 않았음을 깨달았습니다. 이는
var arrArray=[]
arrArray[0]=[와 동일합니다. ] ;
그래서 arrArray[1]은 정의되어 있지 않으므로 배열로 연산하면 오류가 발생합니다.
배열 요소 삭제: delete
var myColors = ["red", "green", "blue"]
delete myColors[1];
alert("myColors[1]의 값: " myColors[1]);
삭제 결과는 myColors[1]=undefine이지만 myColors.length는 변경되지 않고 myColors는 예: ["red",, "blue"]
slice()로 배열 요소를 바꾸거나 완전히 삭제합니다.
var myArray = [1, 2, 3, 4 , 5 ];
myArray.slice(2); // [3, 4, 5]를 반환합니다.
myArray.slice(1, 3); // [2, 3]을 반환합니다.
myArray.slice (- 3); // [3, 4, 5]를 반환합니다.
myArray.slice(-3, -1); // [3, 4]를 반환합니다.
myArray.slice(-4, 3); // [2, 3]을 반환합니다.
myArray.slice(3, 1); // []을 반환합니다.
var myArray = [1, 2, 3, 4, 5]; .splice (3,2,''a'',''b'')
// 4,5를 반환합니다 [1,2,3,''a'',''b'']
myArray .splice(1,1,"in","the","middle");
// 2를 반환합니다. [1,"in","the","middle",3,''a' ', ''b'']
문서를 읽은 후 배열이 참조로 전달된다는 것을 알았습니다!
var x = [10, 9, 8];
var y = x
x[0] = 2
alert("y의 첫 번째 요소 값 is: " y[0]);
결과가 무엇일 것 같나요?
다시 살펴보세요:
// 참조 유형 선언(배열)
var refType = ["first ", " second", " third"]; / 기본 유형(숫자) 선언
var primType = 10;
// 두 개의 인수를 사용하여 수정하는 함수 선언
function 수정값(ref, prim)
{
ref[0] = "changed"; // 첫 번째 인수인 배열을 수정합니다.
prim = prim - 8 // 두 번째 인수인 숫자를 수정합니다.
// 호출 함수
modifyValues(refType, primType);
// 참조 유형의 값을 인쇄합니다.
document.writeln("The value of refType is: ", refType ">");
//기본 유형의 값 인쇄
document.writeln("The value of primType is: ", primType)
테스트 중 문제가 발견되었습니다.
var arr=[];
arr['a']=1;
arr['b']=2
alert(arr.length); 🎜> 뜨는 숫자는 0이에요!
문서를 읽은 후 이러한 배열을 연관 배열이라고 배웠습니다. arr['a']는 arr.a와 동일하고, arr.length는 arr['length']와 동일하며, arr.length는 arr을 초기화(var arr=[];)하면 자동으로 값 0이 할당됩니다.
어떤 사람들은 이 연관 배열을 JavaScript 해시 테이블이라고 부릅니다. 엄밀히 말하면 연관배열과 일반배열 자체가 객체이고(말도 안되는 소리, 자바스크립트에서는 모든 것이 객체입니다 - -) 의미와 사용법은 동일합니다.다음 예를 살펴보세요.
var arr=[];
arr=[1,2,3]
arr.test='test'
alert(arr);
alert(arr[1]);
alert(arr['test'])
var arr=[2,3,4]; 0 ]);
var arr={}; 및 var arr=[]는 모두 var arr=function(){};으로 작성할 수 있습니다.
위 코드에서 볼 수 있듯이 아래 첨자 배열과 연관 배열은 독립적입니다. 첨자는 첨자 배열에만 적용되며 연관 배열은 길이 속성에 영향을 주지 않습니다. 연관 배열의 레이블은 속성이지만 아래 첨자 배열의 첨자는 속성이 아니며 arr[0]!=arr.0이며 arr.0에 액세스하면 오류가 발생합니다.
어떤 시점에서는 arr['a']의 'a'가 다음과 같이 전달될 수 있으므로 arr.a 대신 arr['a']를 메서드 호출로 사용하는 것이 더 효율적일 것입니다. 메소드와 같은 변수 할당 변수:
var d=document,l=links;
이때 direct d.l을 사용하면 오류가 발생하지만, d[l]을 사용하면 올바르게 실행될 수 있다는 것을 알 수 있습니다 :)
alert(d.l);//Script error
alert(d[l]);//Display object
배열은 길이 속성을 가진 객체이므로 길이 속성을 가진 모든 객체는 배열인가요? 문자열과 같은. 테스트 후 Firefox는 String을 배열로 처리할 수 있지만 IE는 처리할 수 없다는 사실을 발견했습니다.
var myString = "Hello world"
alert(myString.length); myString[0]);
배열의 객체는 상대적으로 고유해야 하며 사용자 객체는 완전히 시뮬레이션할 수 없습니다.
function myarray(size){
this.length =size;
var x=0;
}
var arr=new myarray(5)
arr[9]=1;
alert( arr[9]);
alert(arr.length);
Array의 length 속성은 일반적인 객체 속성인 줄 알았는데, 위의 예를 보고 알게 되었습니다. arr의 길이는 더 이상 배열 길이가 아닙니다. arr의 구조는 일반적인 배열 구조가 아닙니다.
함수/클래스를 정의하는 방법에는 여러 가지가 있습니다.
function fName(arguments){
//function body
}; var fName = 함수(인수){
//함수 본문
}
var fName = new Function("arguments","/*함수 본문*/")
세 번째 방법이 더 재미있습니다. 다음 예를 보세요.
var arr=new Function("var total=0; for (var i=0; i
사용 이 메소드는 ajax에서 반환된 JSON을 구문 분석할 수 있으므로 비효율적인 eval이 필요하지 않습니다(eval보다 빠른지 테스트하지 않음).
{b:{c:2}}가 반환된 json 문자열이라고 가정합니다.
var arr=new Function("this.a={b:{c:2}};")
var aa =new arr()
alert(aa.a.b.c );