Browse Source

Improve util.format() compatibility with browser.

Fixes #1434.
v0.7.4-release
koichik 14 years ago
parent
commit
d439c092c2
  1. 5
      doc/api/util.markdown
  2. 4
      lib/util.js
  3. 9
      test/simple/test-util-format.js

5
doc/api/util.markdown

@ -17,9 +17,10 @@ argument. Supported placeholders are:
* `%j` - JSON.
* `%%` - single percent sign (`'%'`). This does not consume an argument.
If the placeholder does not have a corresponding argument, `undefined` is used.
If the placeholder does not have a corresponding argument, the placeholder is
not replaced.
util.format('%s:%s', 'foo'); // 'foo:undefined'
util.format('%s:%s', 'foo'); // 'foo:%s'
If there are more arguments than placeholders, the extra arguments are
converted to strings with `util.inspect()` and these strings are concatenated,

4
lib/util.js

@ -34,7 +34,9 @@ exports.format = function(f) {
var i = 1;
var args = arguments;
var len = args.length;
var str = String(f).replace(formatRegExp, function(x) {
if (i >= len) return x;
switch (x) {
case '%s': return String(args[i++]);
case '%d': return Number(args[i++]);
@ -44,7 +46,7 @@ exports.format = function(f) {
return x;
}
});
for (var len = args.length, x = args[i]; i < len; x = args[++i]) {
for (var x = args[i]; i < len; x = args[++i]) {
if (x === null || typeof x !== 'object') {
str += ' ' + x;
} else {

9
test/simple/test-util-format.js

@ -47,3 +47,12 @@ assert.equal(util.format('%j', '42'), '"42"');
assert.equal(util.format('%%s%s', 'foo'), '%sfoo');
assert.equal(util.format('%s'), '%s');
assert.equal(util.format('%s', undefined), 'undefined');
assert.equal(util.format('%s', 'foo'), 'foo');
assert.equal(util.format('%s:%s'), '%s:%s');
assert.equal(util.format('%s:%s', undefined), 'undefined:%s');
assert.equal(util.format('%s:%s', 'foo'), 'foo:%s');
assert.equal(util.format('%s:%s', 'foo', 'bar'), 'foo:bar');
assert.equal(util.format('%s:%s', 'foo', 'bar', 'baz'), 'foo:bar baz');

Loading…
Cancel
Save