2009-11-09 42 views
5

私はjavascriptでトリム関数を作成しようとしていましたが、私はこのメソッドのために私はgoogledホイールを再発明したくありません。
私は、このリンクを見つけた 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. あなたは、プロトタイプに追加するべきではありません遅いJavaScriptコードで高速のネイティブコード関数を使用します。

また、一般的にわずかに速く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

「あなたはしないでください」というケースはありません。ファビアンが言ったことに気をつけてください。 –

+0

偉大なJavaScript 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機能...

関連する問題