JavaScript: The Good Parts 독서 노트 (4)
var empty = [];
var numbers = ['one','two','three','four','five','six','seven','eight','nine','ten'];
document.writeln(empty[1]); // undefined
document.writeln(numbers[1]); // 'two'
document.writeln(empty.length); // 0
document.writeln(numbers.length); // 10
이제 배열 대상 과 일반 대상 의 차 이 를 살 펴 보 자. //
var numbers_obj = {
"0" : "one",
"1" : "two",
"2" : "three",
"3" : "four",
"4" : "five",
"5" : "six",
"6" : "seven",
"7" : "eight",
"8" : "nine",
"9" : "ten"
};
두 사람 은 어느 정도 비슷 한 결 과 를 얻 었 다. 그들 은 모두 10 개의 속성 을 가 진 대상 을 포함 하고 그 속성 들 은 똑 같은 이름과 값 을 가지 고 있다.하지만 이들 도 눈 에 띄 게 다르다.numbers 는 Array. prototype 에서 계승 되 고 numbersobj 는 Object. prototype 에서 계승 하기 때문에 numbers 는 많은 유용 한 방법 을 계승 했다.동시에 numbers 도 기괴 한 length 속성 을 가지 고 있 습 니 다. 대부분의 언어 에서 하나의 배열 의 요 소 는 반드시 같은 유형 이 어야 한다.그러나 자 바스 크 립 트 는 그룹 에 임의의 종류의 값 을 포함 하도록 허용 합 니 다. var misc = ['string', 98.6, true, false, null, undefined,
['nested','array'], {object:true} ,NaN ,Infinity];
document.writeln(misc.length); // 10
각 배열 마다 length 속성 이 있 습 니 다.대부분의 다른 언어 와 통 하지 않 는 다.자 바스 크 립 트 그룹의 length 는 상한 이 없습니다.현재 length 보다 크 거나 같은 숫자 를 아래 표 로 저장 하면 length 는 새로운 요 소 를 수용 할 수 있 고 배열 경계 오류 가 발생 하지 않 습 니 다.(하나의 Collection 과 유사). 배열 대상 은 length 의 값 을 직접 설정 할 수 있 습 니 다.더 큰 length 를 설정 하면 배열 에 더 많은 공간 을 할당 할 필요 가 없습니다. length 를 작 게 설정 하면 모든 아래 표 시 는 새 length 와 같은 속성 이 삭 제 됩 니 다. numbers.length = 3; // numbers['one','two','three']
// length. .
numbers[numbers.length] = 'shi'; // numbers['one','two','three','shi']
// push :
numbers.push('wu'); // numbers['one','two','three','shi', 'wu']
자바 script 의 배열 은 사실 대상 이 고 그 중의 요 소 는 대상 의 속성 이기 때문이다.그래서 delete 연산 자 를 사용 하여 배열 에서 요 소 를 제거 할 수 있 습 니 다. delete numbers[2]; // numbers['one','two', undefined ,'shi', 'wu']
불 행 히 도, 그러면 배열 에 구멍 이 하나 남는다.이 때 splice 방법 을 사용 하여 후속 요 소 를 앞으로 나 아 갈 수 있 습 니 다. numbers.splice(2,1); // numbers['one','two','shi', 'wu']
splice (연결) 와 slice (분할) 를 구분 하 십시오. slice () 방법 은 배열 을 수정 하지 않 고 하위 배열 로 돌아 갑 니 다. splice () 방법 은 배열 을 직접 수정 합 니 다. length 이 속성의 값 은 이 배열 의 최대 정수 속성 명 에 1 을 더 한 것 입 니 다.그러나 그것 이 반드시 배열 의 속성의 개수 와 같 지 는 않다 (!!) var myArray = [];
document.writeln(myArray.length); // 0
myArray[100000] = true;
document.writeln(myArray.length); // 100001
[] 접두사 아래 표 연산 자 는 표현 식 을 문자열 로 변환 합 니 다. 이 표현 식 에 toString () 방법 이 있 으 면 이 방법의 값 을 사용 합 니 다.이 문자열 은 속성 명 으로 사 용 될 것 입 니 다. 아니면 자바 script 의 배열 이 대상 이기 때문에 For in 문 구 는 한 배열 의 모든 속성 을 옮 겨 다 닐 수 있 습 니 다. 그러나 for in 문 구 는 속성의 순 서 를 보장 할 수 없습니다.그래서 순 서 를 확보 해 야 할 경우 for 순환 을 사용 해 야 합 니 다. 자바 script 프로 그래 밍 에서 흔히 볼 수 있 는 오 류 는 배열 을 사용 해 야 할 때 대상 을 사용 하 는 것 입 니 다.대상 을 사용 해 야 할 때 는 배열 을 사용 했다.헷 갈 리 지 않도록 속성 명 이 작고 연속 적 인 정수 일 때 배열 을 사용 해 야 합 니 다.그렇지 않 으 면 사용 대상. 자바 script 자체 가 배열 과 대상 의 차이 에 대해 혼 란 스 럽 습 니 다. type of 연산 자 는 배열 을 조작 할 때 'object' 를 되 돌려 줍 니 다. 대부분의 경우 의미 가 없습니다.// Javascript 。 is_array :
var is_array = function(value){
return value && typeof value === 'object' && value.constructor === Array;
};
document.writeln(is_array([]));
document.writeln(is_array({}));
위 판단 은 서로 다른 창 (window) 이나 프레임 (frame) 에서 구 성 된 배열 을 식별 하 는 데 실 패 했 습 니 다.만약 외부 배열 을 정확하게 검사 하려 면 우 리 는 더 많은 일 을 해 야 한다. var is_array_enhanced = function(value){
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
// (for in ), , false.
!(value.propertyIsEnumerable('length'));
};
document.writeln(is_array_enhanced([]));
document.writeln(is_array_enhanced({}));
정규 표현 식 자바 script 의 많은 특성 은 다른 언어 에서 참고 합 니 다.문법 은 자바 에서 참고 하고 함 수 는 Lisp 에서 참고 하 며 원형 계승 은 Self 에서 참고 합 니 다. 자바 script 의 정규 표현 식 은 펄 에서 참고 합 니 다. Javascript 에서 정규 표현 식 처리 에 사용 할 수 있 는 방법 은 regexp. exec, regexp. test, string. match string. replace, string. search 와 string. split 입 니 다. 주의해 야 할 때 Javascript 에서 글자 변 수 를 표현 하 는 정규 표현 식 은 여러 줄 을 지원 하지 않 기 때문에 한 줄 로 써 야 합 니 다.
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#([\s\S]*))?$/;
// (?: ...) 。 ? 。
// , , (?:...) ,
// , 。
// JavaScript Java , $1,$2,$3... !
// () ?: regexp
var url = "http://www.ora.com:80/goodparts?q#fragment";
var result = parse_url.exec(url);
var names = ['url','scheme','slash','host','port','path','query','bash'];
var blanks = ' ';
var i ;
document.writeln('<br />');
for(i = 0 ; i < names.length;i++){
document.writeln(names[i]+":"+blanks.substring(names[i].length),result[i]);
document.writeln('<br />');
}
RegExp 대상 을 만 들 수 있 는 두 가지 방법 이 있 습 니 다.이전의 예 에서 우 리 는 우선 글자 표 량 표현법 을 사용 하 는 것 을 보 았 다.정규 표현 식 문자 변 수 는 한 쌍 의 슬 래 쉬 에 둘러싸 여 있 습 니 다 (/... /). JS 에서 슬 래 쉬 도 나눗셈 연산 자 와 주석 부호 로 사 용 됩 니 다. 빌 드 할 때 선택 할 수 있 는 표지 가 3 개 있 습 니 다. G (golbal) 전역 적 (여러 번 일치) 대소 문 자 를 무시 합 니 다. M (Multiline) 다 중 줄 모드 (^ $와 일치 하 는 줄 끝 문자)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.