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.