2009-11-09 4 views
5

자바 스크립트에서 트림 기능을 만들려고했지만 휠을 재발 명하고 싶지는 않았습니다.
내가이 링크를 발견 http://www.somacon.com/p355.phpString의 프로토 타입을 수정해야합니까?

가 제공하는 솔루션은 다음과 같습니다

function trim(stringToTrim) { 
    return stringToTrim.replace(/^\s+|\s+$/g,""); 
} 
function ltrim(stringToTrim) { 
    return stringToTrim.replace(/^\s+/,""); 
} 
function rtrim(stringToTrim) { 
    return stringToTrim.replace(/\s+$/,""); 
} 
: 당신이 다음이를 사용하여 문자열의 프로토 타입을 변경의 Wnt를 don'y 경우는 말한다 또한

String.prototype.trim = function() { 
    return this.replace(/^\s+|\s+$/g,""); 
} 
String.prototype.ltrim = function() { 
    return this.replace(/^\s+/,""); 
} 
String.prototype.rtrim = function() { 
    return this.replace(/\s+$/,""); 
} 

나는 어떤 시나리오에서 하나를 알고 싶습니다 아니 문자열의 프로토 타입을 수정하거나 어떤 개체.

답변

7

trim 기능은 일부 브라우저에 존재 이미 인 ECMAScript 5 판에서 표준화 할 수 있습니다뿐만 아니라, . 그래서 :

  1. 예, 프로토 타입에 추가하는 것은 전적으로 적절하지만 이미이 있다면 당신은 단지를 대체 할 것 같은

  2. 당신은 프로토 타입에 추가해서는 안 느린 자바 스크립트 코드로 빠른 네이티브 코드 기능.

또한 일반적으로 소폭 빠르게 두을 대체으로 트림을하는 것입니다 :

일반적으로
// Add ECMA262-5 string trim if not supported natively 
// 
if (!('trim' in String.prototype)) { 
    String.prototype.trim= function() { 
     return this.replace(/^\s+/, '').replace(/\s+$/, ''); 
    }; 
} 
+1

'if (! ('trim 'in String.prototype)) {' –

+0

if (! String.prototype.trim)의 잘못된 점은 무엇입니까? 좀 더 효율적으로 보입니다. – KooiInc

+3

'in'은 다른 언어가 예외로 간주 할 수있는 새로운'undefined '를 반환하는 속성의 진실성이나 기괴하고 끔찍한 JavaScript 기발함에 의존하지 않고 테스트 대상에 대해 더 명시 적입니다. 이 특별한 경우에 대해서는 전혀 문제가되지 않지만 일반적으로 객체에 속성이 있는지 테스트 할 때는 항상 'in'을 사용합니다. – bobince

1

매우 유용한 유틸리티 기능의 경우, 프로토 타입을 수정할 수 있다고 말하고 싶습니다. 하지만 당신은 함수가 이미 몇 브라우저에서 기본적으로 존재할 수 있다는 것을 알고 있어야합니다, 그래서 당신은 그것을 확인해야합니다 https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/String

+0

하고이 경우 당신이해야하지, 그것은이다 어떤 종류의 간접비 또는 무엇과 관련 있는가? –

+0

Fabien이 말한 것을 "알고 있으면 안된다"는 사례는 없습니다. –

+0

위대한 자바 스크립트 1.8.1은 string.trim() 메소드를 가지고 있습니다. https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim –

2

은 - buildin 객체의 프로토 타입을 수정하지 마십시오. 하지만 편리한 기능을 추가 할 수 있습니다.

그리고 항상 당신이 추가하기 전에 확인 :

//pre-1.6 javascript 
if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(elt) { 
     var len = this.length >>> 0; 
     var from = Number(arguments[1]) || 0; 
     from = (from < 0) ? Math.ceil(from) : Math.floor(from); 
     if (from < 0) 
      from += len; 
     for (; from < len; from++) { 
      if (from in this && this[from] === elt) 
       return from; 
     } 
     return -1; 
    }; 
} 

사용 가능한 언젠가 될 수 있습니다 기능 buildin 빠른 박쥐 우산을 덮어 쓰지 않았다 이런 식으로 ...

관련 문제