2012-06-29 4 views
2

내가 읽는 자바 스크립트 : 좋은 부품 더글러스 Crockford에 의해 자바 스크립트 정규식 리터럴은 같은 개체를 공유합니다. 그렇다면이 두 정규 표현식은 lastIndex 속성에 따라 어떻게 다릅니 까? 서로 다른 객체이기 때문에 3Javascript에있는 두 개의 정규식 리터럴이 속성에 따라 달라지는 이유는 무엇입니까?

+0

저에게 새로운 것입니다. 다른 주장이있는 곳이 있습니까? 아니면 그 행동을 모순되는 것으로 보이는 책의 부분을 인용해도 될까요? –

+2

답변이 게시물에 설명되어 있습니다 : http://stackoverflow.com/questions/2645273/javascript-regular-expression-literal-persists-between-function-calls – davidgoli

답변

4

ECMAScript Documentation 제 7.8.5는 그들이 두 개의 서로 다른 개체를 매우 명확하게 :

7.8.5 정규 표현식 리터럴
문자 정규 표현식은 변환 된 입력 요소입니다 리터럴이 평가 될 때마다 RegExp 객체 (15.10 참조). 프로그램의 두 정규 표현식 리터럴은 두 리터럴의 내용이 동일하더라도 서로 ===로 비교하지 않는 정규 표현식 객체를 평가합니다. RegExp 객체는 새 RegExp (15.10.4 참조) 또는 RegExp 생성자를 함수 (15.10.3)로 호출하여 런타임에 만들 수도 있습니다.

1

반대로

var a = /a/g; 
var b = /a/g; 

a.lastIndex = 3; 
document.write(b.lastIndex);​ 

JS Fiddle

0이 출력된다.

document.write(a === b); 

심지어 false을 출력합니다.

Crockford가 틀렸거나 시간이 맞지만 시간이 바뀌 었습니다.

나는 이것이 특히 유익하거나 도움이되지 않는다는 것을 알고 있습니다. 나는 Crockford가 쓴 것이 당신의 불신으로 여겨지는 것을 되돌리려 고하고 있습니다.

그런 주장에 대한 언급이 있습니까? 문맥 (나는 책이 없다)에서 그것을 읽는 것이 재미있을 것이다.

+0

davidgoli가 게시 한 링크를 확인하십시오. Crockford가 실제로 의미했던 것의 오해입니다. – slebetman

관련 문제