Dr. Axel Rauschmayer is a freelance software engineer, blogger and educator, located in Munich, Germany. Axel is a DZone MVB and is not an employee of DZone and has posted 246 posts at DZone. You can read more from them at their website. View Full User Profile

String concatenation in JavaScript

10.27.2011
| 1819 views |
  • submit to reddit

There are two ways of doing string concatenation in JavaScript. This post demonstrates them and explains which one is faster.

1. + operator. The + operator does string concatenation as soon as one of its operands is a string. Then the other operand is converted to string. Example:

    > "Say hello " + 7 + " times fast!"
    ’Say hello 7 times fast!’
Alternatively, you can use += where
    a += b
is an abbreviation for
    a = a + b
Example:
    > var str = "";
    > str += "Say hello ";
    ’Say hello ’
    > str += 7;
    ’Say hello 7’
    > str += " times fast!";
    ’Say hello 7 times fast!’

2. Joining an array of strings. Collect the strings to be concatenated in an array and join it afterwards.

    > var arr = [];
    > arr.push("Say hello ");
    1
    > arr.push(7);
    2
    > arr.push(" times fast");
    3
    > arr.join("")
    ’Say hello 7 times fast’
Which one is faster? Strings being immutable, most string operations whose results are strings produce new strings. Therefore languages such as C# or Java whose string handling is similar to JavaScript’s have special classes that help with concatenating strings. For example, C# calls this class StringBuilder. However, modern JavaScript engines optimize the + operator internally [1]. Tom Schuster mentions Ropes [2] as one possible technique for optimization. Hence there is no need for StringBuilder in JavaScript. Just use += and be done.

References:

  1. Re: String concatenation” – email by Brendan Eich stating that + is faster on modern JavaScript engines.
  2. Ropes: an Alternative to Strings (1995)” by Hans-J. Boehm , Russ Atkinson , Michael Plass.

 

From http://www.2ality.com/2011/10/string-concatenation.html

Published at DZone with permission of Axel Rauschmayer, author and DZone MVB.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)