2016-11-21 3 views
2

二つの文字列str1='a'str2='b'CONCAT()の違いはありますが、「=」と「+ =」

str1 = str1 + str2; 

または

をconcatinateするには、次の文の間の性能の差がある場合、私は思っていました
str1 += str2; 

または

var res = str1.concat(str2); 

私は私に次のことを試してみましたパフォーマンスを確認しますが、出力は同じステートメントの実行ごとに大きく異なるようです。 MDNによれば

var str1='a', str2='b'; 
var old_time=new Date(); 
for (var i=0; i<=1000000 ; i++){  
    str1=str1+str2;  // change this one with the other statements 
} 
var new_time=new Date(); 
console.log(new_time - old_time); 
+4

あなたは[jsperf](https://jsperf.com/)を作成しましたか? –

+0

いいえ私はこのツールの存在を知らなかった – achref

+2

JavaScriptの+ operatorとconcat()メソッドの違いは何ですか?(http://stackoverflow.com/questions/34465804/what-is-オペレータとコンカットのメソッドのjavascriptの違い) – Wondercricket

答えて

0

"強く代入演算子(+、+ =)を代わりCONCAT()メソッドで使用されているが推奨され、このperformance testを参照。。"

+0

なぜdownvoteですか? –

+1

私は投票しませんでしたが、これは[リンクのみの回答]です(http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-答え)。 – ssube

+0

IMOは言いたいことはもうありません。リンクは明確な情報源から来ています。質問にはっきりと答えています。(*次のような記述では、パフォーマンスに違いがあるかどうかは疑問でした。 –

-1

これらの差連結の3つの方法は、String.prototypeStringがネイティブに参照され、グローバルオブジェクトでゲット/ルックアップされていないと思います)でconcatメソッドをゲット/ルックアップする必要があるため、「遅くなります。

I`m +== ... + ...わからないが、+=はそれ `sネイティブのため= ... + ...よりも高速である必要があります。

+1

"should"、 '+'、 '+ ='についてはどちらも組み込み演算子であることがわかりません。 IEの古いバージョンでは、少なくとも '+ ='で文字列を連結するのは、代入で '+'よりもかなり遅かったので、実装依存であると思っていました。 – RobG

+0

@RobG奇妙な!私が知っていることは速く、時には遅くなる。この 'String#concat'はコメントのパフォーマンステストでは遅くなり、意味をなさない。連結の古い値(ネイティブに扱われる)を指定しないので、 '+ ='は '='より速くなければなりません。 – Hydro

0

str1 += str2; 

に対しstr1 = str1 + str2;よりも少し速いように見えるだろうが、文字列は不変であるので、あなたはstr1から古い参照を再利用することはできません。例:

str0 = str1; // duplicate reference 
str1 += str2; 

str0我々ので、変更可能なオブジェクトとは異なり、インプレース連結が速くできる場所(欲望は(str2と連結する前に)その古い値を保つように連結した後、str1は新しいオブジェクトであります's0も同様に変更されることを期待してください)

より簡潔で理解しやすいので、私はまだ+=という構文が好きです。

+0

VMは、特にほとんどの文字列のようなプリミティブに対して、 'x = x + y'を' x + = y'に簡単かつ合法的に最適化することができます。文字列は不変(通常はコピーオンライトであり、何らかの形のロープを使用する可能性がある)なので、一時オブジェクトに関するビットも誤解を招きやすく、コピーが頻繁に行われます(VMによっては決して行われない場合があります)。 – ssube

+0

@ssube私はそれがJavaScriptの文脈でどのように非常に間違っていたかを理解したので、私の答えをひどく編集したと思った。 –

関連する問題