[removed] string's format is not defined

后端 未结 2 749
暗喜
暗喜 2020-12-20 19:28

I have following snippet of javascript code:

var someValue = 100;
var anotherValue = 555;
alert(\'someValue is {0} and anotherValue is {1}\'.format(someValue         


        
相关标签:
2条回答
  • 2020-12-20 20:05
    String.format = function() {
                var s = arguments[0];
                for (var i = 0; i < arguments.length - 1; i += 1) {
                    var reg = new RegExp('\\{' + i + '\\}', 'gm');
                    s = s.replace(reg, arguments[i + 1]);
                }
                return s;
            };
    
    
    var strTempleate = String.format('hello {0}', 'Ortal');
    
    0 讨论(0)
  • 2020-12-20 20:23

    String.format is not a native String extension. It's pretty easy to extend it yourself:

    if (!String.prototype.format) {
      String.prototype.format = function(...args) {
        return this.replace(/(\{\d+\})/g, function(a) {
          return args[+(a.substr(1, a.length - 2)) || 0];
        });
      };
    }
    // usage
    console.log("{0} world".format("hello"));
    .as-console-wrapper { top: 0; max-height: 100% !important; }

    [Update 2020]

    It's not that fashionable anymore to extend native objects. Although I don't oppose it (if used carefully) a format-function can do exactly the same, or you can use es20xx template literals (see MDN).

    // no native String extension
    const someValue = 100;
    const otherValue = 555;
    const format = (str2Format, ...args) => 
      str2Format.replace(/(\{\d+\})/g, a => args[+(a.substr(1, a.length - 2)) || 0] );
    console.log(format("someValue = {0}, otherValue = {1}", someValue, otherValue));
    
    // template literal
    console.log(`someValue = ${someValue}, otherValue = ${otherValue}`);
    .as-console-wrapper { top: 0; max-height: 100% !important; }

    0 讨论(0)
提交回复
热议问题