[JS 학습 노트] 5 장

12871 단어
RegExp 유형
ECMAScript 는 RegExp 형식 을 통 해 정규 표현 식 을 지원 합 니 다.var expression = /pattern / flags; pattern 모드 는 정규 표현 식 입 니 다.
정규 표현 식 은 3 개의 표준 조합 체 (i, g, m) m 다 중 줄 모드 입 니 다. 한 줄 의 텍스트 끝 에 도 달 했 을 때 다음 줄 에 패턴 과 일치 하 는 항목 이 있 는 지 계속 찾 습 니 다.
모든 메타 문 자 는 정규 표현 식 에 한 가지 또는 여러 가지 특수 한 용도 가 있 기 때문에 문자열 에 포 함 된 이 문자 들 과 일치 하려 면 전 의 를 해 야 합 니 다.
var pattern1 = /[bc]at/i;//     "bat" "cat",      
var pattern2 = /\[bc\]at/i;//     "[bc]at",      
var pattern1 =/.at/gi;//   “at”   3      ,      
var pattern2=/\.at/gi;//    ".at",      

다른 하 나 는 구조 함수 로 2 개의 인자 var pattern 1 = / [bc] at / i 를 받 습 니 다.var pattern2 = new RegExp("[bc]at","i");
RegExp 실례 방법
RegExp 대상 의 주요 방법 은 exec () 이 고 이 방법 은 포획 팀 을 위해 설계 되 었 다.패턴 을 적용 할 문자열 을 받 아들 이 고 첫 번 째 일치 하 는 정 보 를 포함 하 는 배열 을 되 돌려 줍 니 다.일치 하 는 항목 이 없 는 상태 에서 null 로 돌아 갑 니 다.돌아 오 는 배열 은 Array 의 인 스 턴 스 입 니 다. 2 개의 속성 을 포함 합 니 다. index (문자열 에 있 는 위치 와 일치 하 는 항목) 와 input (정규 표현 식 을 사용 하 는 문자열 을 표시 합 니 다).배열 에서 첫 번 째 항목 은 전체 패턴 과 일치 하 는 문자열 입 니 다. 다른 항목 은 패턴 의 캡 처 그룹 과 일치 하 는 문자열 입 니 다. (캡 처 그룹 이 없 으 면 이 배열 은 한 가지 만 포함 합 니 다)
캡 처 그룹 은 정규 표현 식 중성자 식 과 일치 하 는 내용 을 말 합 니 다. 메모리 에 숫자 번호 나 명시 적 이름 을 가 진 그룹 에 저장 하여 나중에 참조 하기 편리 합 니 다.
var text = "mom and dad and baby";
var pattern = /mom( and dad ( and baby )?)?/gi;
var matches = pattern.exec(text);
alert(matches.index);//0
alert(matches.input);//"mom and dad and baby"
alert(matches[0]);//"mom and dad and baby"
alert(matches[1]); //"and dad and baby"
alert(matches[2]);//"and baby"

exec () 방법 에 있어 서 모드 에 전역 표 지 를 설정 하 더 라 도 매번 일치 하 는 항목 만 되 돌려 주 고 전역 표 지 를 설정 하지 않 으 며 같은 문자열 에서 exec () 를 여러 번 호출 할 때마다 첫 번 째 일치 하 는 항목 의 정 보 를 되 돌려 줍 니 다.전역 플래그 를 설정 합 니 다. exec () 를 호출 할 때마다 문자열 에서 새 일치 하 는 항목 을 계속 찾 습 니 다.
var text = "car,bat,sat,fat";
var pattern1 =/.at/;

var matches = pattern1.exec(text);
alert(matches.index);//0
alert(matches[0]);//cat
alert(pattern1.lastIndex);//0

matches = pattern1.exec(text);
alert(matches.index);//0
alert(matches[0];//cat
alert(matches.lastIndex);//0


var pattern2=/.at/g;
var matches = pattern2.exec(text);
alert(matches.index);//0
alert(matches[0]);//cat
alert(pattern2.lastIndex);//3


matches = pattern.exec(text);
alert(matches.index);//5
alert(matches[0]);//bat
alert(matches.lastIndex);//8

다른 방법 test ()
이것 은 문자열 파 라미 터 를 받 아들 여 패턴 이 이 파라미터 와 일치 하 는 상황 에서 true 를 되 돌려 줍 니 다. 그렇지 않 으 면 false 를 되 돌려 줍 니 다.대상 문자열 이 어떤 패턴 과 일치 하 는 지 알 고 싶 지만 텍스트 내용 을 알 필요 가 없 는 경우 이 방법 은 매우 편리 합 니 다.
var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;

if (pattern.test(text)){
    alert("The pattern was matched.");
}

구조 함수 의 속성
RegExp 구조 함 수 는 일부 속성 을 포함 하고 있 으 며, 이러한 속성 은 역할 영역 에 있 는 모든 정규 표현 식 에 적용 되 며, 실 행 된 최근 정규 표현 식 작업 에 따라 달라 집 니 다.짧 은 속성 명 을 사용 하면 대부분 유효한 ECMAScript 식별 자가 아니 기 때문에 괄호 로 접근해 야 합 니 다.
var text = "this has been a short summer";
var pattern = /(.)hort/g;

if (pattern.test(text)){
   alert(RegExp.input);//this has been a short summer
    alert(RegExp.$_);
   alert(RegExp.leftContext);//this has been a
   alert(RegExp["$`"]);
   alert(RegExp.rightContext);//summer
   alert(RegExp["$' "])
   alert(RegExp.lastMatch);//short
   alert(RegExp["$&"])
   alert(RegExp.lastParen);//s  lastParen=          
   alert(RegExp["$+"])
   alert(RegExp.multiline);//false
   alert(RegExp["$*"])

캡 처 그룹 을 저장 하 는 구조 함수 속성 은 9 개 에 달한다.RegExp. $1, RegExp. $2..................................................................................
var text = "this has been a short summer";
var pattern = /(..)or(.)/g;
if(pattern.test(text)){
   alert(RegExp.$1);//sh
   alert(RegExp.$2);//t
}

참고:http://www.cnblogs.com/snandy/p/3662423.html
함수 유형
모든 함 수 는 function 형식의 인 스 턴 스 로 속성 과 방법 을 가지 고 있 습 니 다.함수 가 대상 이기 때문에 함수 명 은 함수 대상 을 가리 키 는 지침 으로 어떤 함수 와 연결 되 지 않 습 니 다.
function sum(num1,num2){
     return num1 + num2;
}//      

var sum =function(num1,num2){
   return num1 + num2;
}//   sum        ,function          ,               ,         -    sum      。

var sum = new Function("num1","num2","return num1+ num2");
//function    ,         ,          。
//       ,       2   (       ECMAScript  ,                 ),      
//               ,               。


함수 선언 과 함수 표현 식
alert(sum(10,10));
function sum(num1,num2){
     return num1+num2;
}

이상 함수 가 정상적으로 작 동 합 니 다.코드 가 실행 되 기 전에 해상도 기 는 함수 성명 향상 (function declaration hoisting) 이라는 과정 을 통 해 함수 성명 을 읽 고 실행 환경 에 추가 하기 때 문 입 니 다.코드 값 을 구 할 때 자 바스 크 립 트 엔진 은 처음으로 함 수 를 설명 하고 소스 트 리 의 맨 위 에 놓 습 니 다.그러나 함수 표현 식 으로 바 꾸 면 오류 가 발생 할 수 있 습 니 다.
alert(sum(10,10));
var sum =function (num1,num2){
     return num1+num2;
}

값 함수
function callSomeFunction(someFunction,someArgument){
     return someFunction(someArgument);
}

function add10(num){
     return num+10;
}

var result1 = callSomeFunction(add10,10);
alert(result1);//20

function getGreeting(name){
    return "Hello, " +name;
}

var result2 = callSomeFunction(getGreeting,"Nicholas");
alert(result2); //"Hello,Nicholas"

함 수 는 하나의 매개 변수 로 다른 함수 에 전달 할 수도 있 고 함수 의 결과 로 되 돌아 갈 수도 있다.상례 에서 첫 번 째 매개 변 수 는 someFunction 이 하나의 함수 이 고 두 번 째 매개 변 수 는 someArgument 가 이 함수 에 전달 하 는 값 입 니 다.
function createComparisonFunction(propertyName){
   return function(object1,object2){
       var value1 = object1[propertyName];
       var value2 = object2[propertyName];
    if (value1 value2) {
         return 1;
     } else {
          return 0;
     }
    };
}
var data = [{name:"Zachary",age:28},{name: "Nicholas", age:29}];
data.sort(createComparisonFunction("name"));
alert(data[0].name);//Nicholas

data.sort(createComparisonFunction("age"));
alert(data[0].name);//Zachary;


하나의 대상 배열 은 특정한 속성 에 따라 배열 을 정렬 하지만 어떤 속성 에 따라 정렬 하 는 지 를 가리 키 는 방식 이 필요 합 니 다. 이 를 위해 함 수 를 정의 하고 속성 명 을 받 아들 인 다음 에 이 속성 명 에 따라 비교 함 수 를 만들어 야 합 니 다.
함수 내부 속성
함수 내부 에 2 개의 특수 대상 이 있 습 니 다. arguments 와 this. arguments 는 클래스 배열 대상 입 니 다. 함수 에 들 어 오 는 모든 인 자 를 포함 하고 함수 인 자 를 저장 하 는 데 사 용 됩 니 다. 이 대상 은 callee 속성 이 있 습 니 다. 지침 으로 이 arguments 대상 을 가 진 함 수 를 가리 키 고 있 습 니 다.
결합 이란 두 개 또는 두 개 이상 의 체계 나 두 가지 운동 형식 간 에 상호작용 을 통 해 서로 영향 을 주어 연합 하 는 현상 을 말한다.결합 을 푸 는 것 은 수학 적 방법 으로 두 가지 운동 을 분리 하여 문 제 를 처리 하 는 것 이다. 자주 사용 하 는 결합 방법 은 연구 문제 에 미 치 는 영향 이 비교적 적은 운동 을 무시 하거나 간소화 하여 주요 한 운동 만 분석 하 는 것 이다.
function factorial(num){//                ,            ,        。            factorial        。      ,    arguments.callee.
   if (num<=1){
         return 1;
     } else{
         return num * factorial(num-1);
      }
 }

function factorial(num){
   if (num<=1){
    return 1;
} else {
    return num *arguments.callee(num-1);
  }
}//     ,       factorial。

var trueFactorial =factorial;
factorial = function() {
     return 0;
};
alert(trueFactorial(5));//120
alert(factorial(5));//0


재 귀 알고리즘 은 사실 말하자면 프로그램의 자체 호출 이다.재 귀 알고리즘 에 나타 난 '중복' 은 보통 세 가지 요구 가 있다. (1) 매번 호출 할 때마다 규모 가 축소 되 는 것 이다 (보통 반 으로 줄어든다).(2) 인접 한 두 번 의 반복 사이 에 밀접 한 관 계 를 가 진 것 으로 앞의 번 은 다음 번 을 위해 준비 해 야 한다 (보통 앞의 출력 은 뒤의 입력 으로 한다).(3) 문제 의 규모 가 매우 큰 시간 에 반드시 직접 해답 을 제시 하고 재 귀적 호출 을 하지 않 아야 하기 때문에 매번 재 귀적 호출 은 조건 이 있다 (규모 가 직접 해답 의 크기 에 이 르 지 못 하 는 것 을 조건 으로). 무조건 재 귀적 호출 은 순환 이 되 어 정상적으로 묶 이지 못 한다.
함수 호출 은 한 가지 형식 만 있 습 니 다: func. call (context, p1, p2)
IMG_8127.JPG
http://stackoverflow.com/questions/7056925/how-does-array-prototype-slice-call-work
다른 함수 대상 의 속성 은 caller 입 니 다. 현재 함 수 를 호출 하 는 함수 의 인용 을 저장 합 니 다.
function outer(){
    inner();
}

function inner(){
      alert(inner.caller);
}

outer();

outer () 가 inner () 를 호출 했 기 때문에 inner. caller 는 outer () 를 가 리 켰 습 니 다.더 느슨 한 결합 을 실현 하기 위해 서 는 inner. caller 를 arguments. callee. caller 로 바 꿀 수 있 습 니 다.
함수 의 속성 과 방법
함수 가 대상 이기 때문에 속성 과 방법 도 있 습 니 다.2 개 속성: length 는 받 아들 인 이름 매개 변수의 개 수 를 표시 합 니 다.또 하 나 는 this,https://zhuanlan.zhihu.com/p/23804247
각 함수 에는 계승 이 아 닌 방법 2 개가 포함 되 어 있 습 니 다. apply () 와 call (). 이 두 가지 방법의 용 도 는 특정한 역할 영역 에서 함 수 를 호출 하 는 것 입 니 다. 실제 적 으로 함수 내 this 대상 의 수 치 를 설정 하 는 것 과 같 습 니 다.apply () 방법 은 두 개의 인 자 를 받 습 니 다. 하 나 는 함 수 를 실행 하 는 역할 영역 이 고 다른 하 나 는 매개 변수 배열 (매개 변수 배열 일 수도 있 고 Array 의 인 스 턴 스 일 수도 있 습 니 다) 입 니 다.call () 의 차이 점 은 두 번 째 매개 변 수 는 직접적인 매개 변수 이 고 하나씩 열거 하 는 것 이다.(this,num1,num2)
function sum(num1,num2){
     return num1 + num2;
}

function callSum1(num1,num2){
      return sum.apply(this,arguments);//   arguments  
}

function callSum2(num1,num2){
      return sum.apply(this,[num1,num2]);//    
}

alert(callSum1(10,10));//20
alert(callSum2(10,10));//20


진정한 역할 은 역할 영역 을 확장 하 는 것 입 니 다. 보통 함수 뒤에 하나의 역할 영역 대상 을 호출 합 니 다.
window.color = "red";
var o = {color:"blue"};
function sayColor(){
  alert(this.color);
}

sayColor();//red
sayColor.call(this);//red
sayColor.call(window);//red
sayColor.call(o);//blue

인용 전달 매개 변수 에 따 르 면 이 인용 은 대상 이 메모리 공간 에 있 는 주소 의 인용 을 말 합 니 다. 두 변 수 는 같은 메모리 공간 주 소 를 가리 킬 수 있 습 니 다. 이 인용 을 방법 에 전달 하면 방법 에서 이 인용 중의 데 이 터 를 바 꾸 면 이 인용 변 수 를 가리 키 는 값 이 모두 변 경 됩 니 다.
기본 포장 유형
왜 존재 합 니까? 기본 형식의 값 을 조작 하기 위해 서 는 3 가지 특별한 인용 유형 이 있 습 니 다. Boolean, Number, String. 포장 을 통 해 인용 유형의 방법 과 속성 을 가지 고 있 으 며 기본 유형의 특수 행위 도 있 습 니 다. 기본 유형의 값 을 읽 을 때마다 배경 에 해당 하 는 기본 포장 유형의 대상 을 만 들 고 방법 을 사용 하여 조작 할 수 있 습 니 다.데 이 터 를 만 듭 니 다. 기본 포장 형식의 인 스 턴 스 호출 type of 는 "object" 를 되 돌려 줍 니 다. 불 값 으로 바 뀌 었 을 때 모두 true 입 니 다. Boolean (value)
var s1="some text";
var s2=s1.substring(2);

위의 코드 과정 은 다음 과 같다.
var s1 = new String("some text");//  string       
var s2 = s1.substring(2);//           
s1 = null //      

인용 유형 과 기본 포장 유형의 차이
var s1 = "some text";
s1.color = "red";
alert(s1.color);//undefined

자동 으로 생 성 되 는 기본 포장 형식의 대상 은 한 줄 코드 가 실행 되 는 순간 에 만 존재 하 며 즉시 삭 제 됩 니 다. new 연산 자 로 만 든 참조 형식의 인 스 턴 스 는 실행 흐름 이 현재 역할 영역 을 떠 나 기 전에 메모리 에 저 장 됩 니 다.
object 구조 함수 에 문자열 을 전달 하면 string 인 스 턴 스 를 만 들 고 숫자 를 입력 하면 number 인 스 턴 스 를 만 듭 니 다. 불 값 은 불 값 인 스 턴 스 입 니 다.
var obj = new Object("some text");
alert(obj instanceof String);//true

그러나 new 를 사용 하여 기본 포장 유형의 구조 함 수 를 호출 하 는 것 은 동명 의 구조 전환 함 수 를 직접 호출 하 는 것 과 다르다.
var value = "25";
var number =Number (value);//    
alert(typeof number);//"number"

var obj = new Number(value);//         
alert(typeof obj);//"object"
  • Boolean 타 입 Boolean 타 입 은 불 값 에 대응 하 는 참조 타 입 입 입 니 다. 구조 함 수 를 통 해 boolean 대상 을 만 듭 니 다: var boolean Object = new Boolean (true);
  • Number type var numberObject = new Number (10);
  • Number 형식 은 문자열 로 포맷 하 는 방법 도 제공 합 니 다. var num = 10; alert (num. toFixed (2), / 10: 00 / 지정 한 작은 숫자 입 니 다.
    3. String 형식 var stringObject = new String ("Hello world");
  • 문자 방법 - 특정 위치 에 접근 하 는 문자 나 문자 인 코딩
  • var stringValue ="hello world";
    alert(stringValue.charAt(1)); //"e"
    alert(stringValue.charCodeAt(1)); //"101",  e     
    
  • 문자열 조작 방법 concat () 는 여러 개의 인 자 를 받 아들 여 새로운 문자열 사본 을 만 듭 니 다. 원래 문자열 은 변 하지 않 습 니 다.
  • 3 개의 문자열 을 기반 으로 새 문자열 을 만 드 는 방법: slice, substring, substr. 모두 작업 문자열 의 하위 문자열 을 되 돌려 주 고 1 - 2 개의 인 자 를 받 아들 이 며 첫 번 째 인 자 는 하위 문자열 의 시작 위 치 를 지정 하고 두 번 째 인 자 는 끝 난 위 치 를 표시 합 니 다.
    var stringValue ="hello world";
    alert(stringValue.slice(3));//"lo world"
    alert(stringValue.substring(3));//"lo world"
    alert(stringValue.substr(3));//"lo world"
    alert(stringValue.slice(3,7));//"lo w",7                 
    alert(stringValue.substring(3,7));//"lo w",7                 
    alert(stringValue.substr(3,7));//"lo worl",7      
    
    
  • 문자열 위치 방법 index Of () 와 lastIndex Of () 는 두 개의 인 자 를 받 아들 일 수 있 습 니 다. 두 번 째 인 자 는 어느 위치 에서 검색 을 시작 하 는 지 표시 합 니 다
  • var stringValue = "Lorem ipsum dolor sit amet, consectetur elit";
    var positions = new Array();
    var pos = stringValue.indexOf("e");//     ,    "e"          
    
    while (pos>-1){//              ,    -1
        positions.push(pos);// e     push    
        pos = stringValue.indexOf("e",pos +1);//     ,    indexOf()        1,                      
    }
    alert(positions); //"3,24,32,35,52"
    
  • trim 방법 으로 던 전 을 만 들 고 전치 와 접미사 의 모든 빈 칸 을 제거 합 니 다
  • 좋은 웹페이지 즐겨찾기