>  기사  >  웹 프론트엔드  >  space_javascript 팁을 제거하기 위한 JavaScript 메소드 모음

space_javascript 팁을 제거하기 위한 JavaScript 메소드 모음

WBOY
WBOY원래의
2016-05-16 18:13:14990검색

구현 1

코드 복사 코드는 다음과 같습니다.

String.prototype.trim = function () {
return this .replace(/^ss*/, '' ).replace(/ss*$/, '' )
}

그렇지 않습니다. 많이 보이면 사용하십시오. 두 번의 정기적인 교체가 수행되며, 주로 브라우저의 내부 최적화로 인해 실제 속도가 매우 놀랍습니다. 유명한 예는 문자열 접합(string splicing)입니다. Array로 만든 StringBuffer보다 직접 추가가 더 빠릅니다. base2 클래스 라이브러리는 이 구현을 사용합니다.
구현 2
코드 복사 코드는 다음과 같습니다.

String.prototype. Trim = function () {
return this .replace(/^s /, '' ).replace(/s $/, '' )
}

매우 유사 구현 1. 그러나 약간 느린데, 그 이유는 먼저 적어도 하나의 공백 문자가 있다고 가정하기 때문입니다. Prototype.js는 이 구현을 사용하지만 Prototype의 메소드는 Ruby와 동일한 이름을 가지려고 노력하기 때문에 이름은 스트립입니다.
구현 3
코드 복사 코드는 다음과 같습니다.

String.prototype. Trim = function () {
return this .substring(Math.max( this .search(/S/), 0), this .search(/Ss*$/) 1)
}

가로채기를 통해 빈 부분을 얻으며(물론 중간에 공백도 허용) 총 4개의 네이티브 메소드가 호출됩니다. 매우 교묘하게 설계된 하위 문자열은 두 개의 숫자를 매개변수로 사용합니다. Math.max는 두 개의 숫자를 매개변수로 사용하고 검색은 하나의 숫자를 반환합니다. 위의 두 가지보다 약간 느리지만 아래의 대부분보다 빠릅니다.
구현 4
코드 복사 코드는 다음과 같습니다.

String.prototype. Trim = function () {
return this .replace(/^s |s $/g, '' );
}

이것은 구현 2의 단순화된 버전이라고 할 수 있습니다. , 이는 후보 연산자를 사용하여 두 개의 정규식을 연결합니다. 하지만 그렇게 하면 브라우저 최적화 기회를 잃게 되며 이는 3을 구현하는 것만큼 좋지 않습니다. 매우 우아해 보이기 때문에 JQuery, mootools 등 많은 클래스 라이브러리에서 사용합니다.
구현 5

String.prototype.trim = function () {
var str = this
str = str.match(/S (?:s S )*/ );
return str ? str[0] : '' ;
}

match는 배열을 반환하므로 요구 사항을 충족하는 원본 문자열 부분이 배열의 요소가 됩니다. 문자열 중간에 있는 공백 문자가 제외되는 것을 방지하려면 비캡처 그룹화(?:exp)를 사용해야 합니다. 배열이 비어 있을 수 있으므로 나중에 추가 결정을 내려야 합니다. 브라우저는 그룹화 처리가 상대적으로 약하고, 단어 하나도 느린 것 같습니다. 그러므로 규칙성이 기본적으로 전능하더라도 규칙성에 대해 미신을 갖지 마십시오.
구현 6
코드 복사 코드는 다음과 같습니다.

String.prototype. Trim = function () {
return this .replace(/^s*(S*(s S )*)s*$/, '$1' )

요구 사항과 일치 부품이 제공되고 빈 문자열에 배치됩니다. 그러나 특히 IE6에서는 효율성이 매우 낮습니다.
구현 7

코드 복사 코드는 다음과 같습니다.
String.prototype. Trim = function () {
return this .replace(/^s*(S*(?:s S )*)s*$/, '$1' )


구현 6은 매우 유사하지만 비캡처 그룹화를 사용하여 이를 활용하고 성능 효율성이 약간 향상됩니다.
구현 8


String.prototype. Trim = function () {
return this .replace(/^s*((?:[Ss]*S)?)s*$/, '$1' )


위의 두 가지 아이디어에 따라 비캡처 그룹과 문자 집합을 사용하고 * 대신 ?를 사용하여 개선되었습니다. 특히 IE6에서 이러한 성능 향상은 미친 짓이라고 할 수 있으며, 직접적으로 Firefox를 죽입니다.
구현9



코드 복사 코드는 다음과 같습니다

String.prototype.trim = function () {
return this .replace(/^s*([Ss]*?)s*$/, '$1' )
}

이번에는 비캡처 그룹화를 대체하기 위해 지연 매칭이 사용되었는데, 이는 지난번처럼 IE에서 개선되었습니다.
구현 10
코드 복사 코드는 다음과 같습니다.

String.prototype. Trim = function () {
var str = this ,
whitespace = ' nrtfx0bxa0u2000u2001u2002u2003u2004u2005u2006u2007u2008u2009u200au200bu2028u2029u3000'
for ( var i = 0, len = str.length; i < i ) {
if (whitespace .indexOf(str.charAt(i)) === -1) {
str = str.substring(i)
break
}
}
for ( i = str .length - 1; i >= 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring (0, i 1);
break
}
}
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '' ;

이것을 만든 사람은 더 이상 소가 아니라 이미 신의 수준에 이르렀다는 점을 말씀드리고 싶습니다. 먼저 가능한 모든 공백 문자를 나열하고, 첫 번째 순회에서 앞의 공백 문자를 잘라내고, 두 번째 패스에서 다음 공백 문자를 잘라냅니다. 전체 프로세스에서는 문자열 처리를 위해 특별히 설계된 기본 메서드인 indexOf 및 substring만 사용하며 정규식은 사용하지 않습니다. 속도는 놀라울 정도로 빠르며 내부 바이너리 구현에 가까운 것으로 추정되며 IE와 Firefox(물론 다른 브라우저도 포함)에서 잘 작동합니다. 속도는 0밀리초입니다.
구현 11

코드 복사 코드는 다음과 같습니다.
String.prototype. Trim = function () {
var str = this ,
str = str.replace(/^s /, '' )
for ( var i = str.length - 1; i >= 0; i --) {
if (/S/.test(str.charAt(i))) {
str = str.substring(0, i 1)
break
}
}
return str;
}

구현 10에서는 일반적인 네이티브 문자열 가로채기 방법이 약간 더 복잡하기는 하지만 일반 대체 방법보다 훨씬 낫다고 밝혔습니다. . 그러나 정규식이 너무 복잡하지 않은 한 브라우저의 정규식 최적화를 사용하여 IE에서 8의 성능을 달성하는 등 프로그램 실행 효율성을 향상시킬 수 있습니다. 공백 구현이 너무 길고 기억하기 어렵기 때문에 일반적으로 아무도 구현 10을 프로젝트에 적용하지 않을 것이라고 생각합니다(물론 클래스 라이브러리를 구축하는 경우에는 확실히 첫 번째 구현입니다). 구현 11은 전면 부분의 공백을 정기적인 교체로 잘라내고, 후자 부분을 기본 방식으로 처리한 버전이라고 할 수 있지만, 효과는 원래 버전보다 떨어지지 않지만 속도는 매우 놀랍습니다. .
구현 12

코드 복사 코드는 다음과 같습니다.
String.prototype. Trim = function () {
var str = this ,
str = str.replace(/^ss*/, '' ),
ws = /s/,
i = str.length ;
while (ws.test(str.charAt(--i)));
return str.slice(0, i 1)
}

구현 10 및 구현 11 쓰기 측면에서 더 좋고 향상된 버전입니다. 성능과 속도가 아니라 메모리와 사용 편의성에 관한 것입니다. 두 전임자는 모두 0밀리초 수준입니다. 앞으로 작업과 위협에 사용할 것입니다.
다음은 외국인이 제시한 비교 결과입니다. 실행 배경은 마그나카르타 조항(27,600자 이상)을 다듬은 것입니다.
Firefox 2 IE 6 구현
trim1 15ms < 0.5ms
trim2 31ms < 0.5ms
trim3 46ms 31ms
trim4 47ms 46ms
trim6 1 72ms 2406ms
trim7 172ms 1640ms
trim8 281ms
trim9 125ms 78ms
trim10 < 0.5ms < 0.5ms
트림12 & lt ; 0.5ms < 0.5ms




성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.