2011-12-07 16 views
0

以前に分割された変数を分割して元の変数を上書きするときに問題がありますか?ソース変数を.split()の結果で上書きする

例:

arr = str.split(" "); 
arr = arr[0].split("/"); 

私はそれをテストし、それが動作します。しかし:

  • これは危険ですか?
  • いつものように、またすべてのブラウザで動作しますか?
+0

'arr = str.split( ''); arr = arr?スペース上で分割すると0の結果が返ってもエラーにならない限り、arr [0] .split( '/'): '' ' – JesseBuesking

+0

私はこのようなことを習慣にしているので、一時的な変数だけを作成する必要はありません。私はそれを行う上で何の問題もなく、すべてのブラウザで動作します。 –

+0

arrの要素が> 0である限り、その罰金です。 –

答えて

3

これはすべてのブラウザで問題ありません。リスクはありません。

変数arrに新しいものを参照するように代入するだけで、それが何を参照するのかは関係ありません。 (これは実際には「古い配列を上書き」しませんが、古い配列への他の参照がない場合、ガベージコレクタはそれの世話をします。)

ます。また、1行でそれを行うことができます。

arr=str.split(" ")[0].split("/"); 

according to MDN, .split()は、ソース文字列が空でも区切り文字も含まない場合でも、少なくとも1つの要素を含む配列を常に返します。

EDIT:ソース文字列の両方が空の文字列の場合.split()は空の配列を返すようです。つまり、"".split("")[]を返します。それを指摘してくれたMunimに感謝します。 (ただし、"".split(" ")[""]を返すので、この質問のために問題はありません)

+0

その1行の改善に感謝します! (とあなたの答えのために) – ajax333221

0

arrが完全に上書きされていることがわかっている場合は、全く危険ではありません。コードの大部分に対してこれを行うのは悪い習慣かもしれません。もし他の人がそれを読むつもりなら、この論理的に何も問題はありません。 arr = str.split( "")[0] .split( "/"); もっと謎めいたことを知りたければ、これを試してみてください。

もちろん、さまざまな部分がすべて評価されていることを確認する必要があります(たとえば、空白がない場合は[0]がNULLになります)、エラーが発生します strに空白があると、上記のコードを読むのが最も難しくなります;)

関連する問題