ideas & ramblings

Ridiculously simple string formatting in JavaScript

(Originally published in 2012.)

Note: this was originally written in January 2012. Template strings are a part of the ES6 standard and are quite nice. This entry remains for historical purposes.

Inserting variables into strings is incredibly easy in some languages, but it’s a bit of a pain in JavaScript. Gluing bits of text and variables together is error prone and hard to read.

Here’s a simple extension to the .toString method on the Object prototype to allow variable insertion using %markers% %like% %this%. Of course, modifying the Object prototype in production code is a pretty terrible idea – this implementation is more of a wistful sigh towards a syntax that would be wonderful.

(function() {
  var originalToString = Object.prototype.toString;
  Object.prototype.toString = function(format) {
    if(typeof(format) !== 'string') {
      return originalToString.call(this);
    }

    return format.replace(/%([^%]+)%/g, function(_, key) {
      return this.hasOwnProperty(key) ? this[key] : '';
    }.bind(this));
  }
})();

So, here’s how it would work. You’d have an object with named values in it, and you’d pass your format string to its toString method:

var data = {
  'name': 'Mark',
  'loc': 'California'
}

console.log(data.toString("Hello. My name is %name%, and I am in %loc%."));

I really wish this was part of the standard.