Converting an object to a string

后端 未结 30 1853
北荒
北荒 2020-11-22 03:29

How can I convert a JavaScript object into a string?

Example:

var o = {a:1, b:2}
console.log(o)
console.log(\'Item: \' + o)

Output:

相关标签:
30条回答
  • 2020-11-22 04:10

    I would recommend using JSON.stringify, which converts the set of the variables in the object to a JSON string. Most modern browsers support this method natively, but for those that don't, you can include a JS version:

    var obj = {
      name: 'myObj'
    };
    
    JSON.stringify(obj);
    
    0 讨论(0)
  • 2020-11-22 04:10

    Use javascript String() function

     String(yourobject); //returns [object Object]
    

    or stringify()

    JSON.stringify(yourobject)
    
    0 讨论(0)
  • 2020-11-22 04:10
    function objToString (obj) {
        var str = '{';
        if(typeof obj=='object')
          {
    
            for (var p in obj) {
              if (obj.hasOwnProperty(p)) {
                  str += p + ':' + objToString (obj[p]) + ',';
              }
          }
        }
          else
          {
             if(typeof obj=='string')
              {
                return '"'+obj+'"';
              }
              else
              {
                return obj+'';
              }
          }
    
    
    
        return str.substring(0,str.length-1)+"}";
    }
    
    0 讨论(0)
  • 2020-11-22 04:12

    If you wont aplay join() to Object.

    const obj = {one:1, two:2, three:3};
    let arr = [];
    for(let p in obj)
        arr.push(obj[p]);
    const str = arr.join(',');
    
    0 讨论(0)
  • 2020-11-22 04:14

    If you're just outputting to the console, you can use console.log('string:', obj). Notice the comma.

    0 讨论(0)
  • 2020-11-22 04:14

    JSON methods are quite inferior to the Gecko engine .toSource() primitive.

    See the SO article response for comparison tests.

    Also, the answer above refers to http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html which, like JSON, (which the other article http://www.davidpirek.com/blog/object-to-string-how-to-deserialize-json uses via "ExtJs JSON encode source code") cannot handle circular references and is incomplete. The code below shows it's (spoof's) limitations (corrected to handle arrays and objects without content).

    (direct link to code in //forums.devshed.com/ ... /tosource-with-arrays-in-ie-386109)

    javascript:
    Object.prototype.spoof=function(){
        if (this instanceof String){
          return '(new String("'+this.replace(/"/g, '\\"')+'"))';
        }
        var str=(this instanceof Array)
            ? '['
            : (this instanceof Object)
                ? '{'
                : '(';
        for (var i in this){
          if (this[i] != Object.prototype.spoof) {
            if (this instanceof Array == false) {
              str+=(i.match(/\W/))
                  ? '"'+i.replace('"', '\\"')+'":'
                  : i+':';
            }
            if (typeof this[i] == 'string'){
              str+='"'+this[i].replace('"', '\\"');
            }
            else if (this[i] instanceof Date){
              str+='new Date("'+this[i].toGMTString()+'")';
            }
            else if (this[i] instanceof Array || this[i] instanceof Object){
              str+=this[i].spoof();
            }
            else {
              str+=this[i];
            }
            str+=', ';
          }
        };
        str=/* fix */(str.length>2?str.substring(0, str.length-2):str)/* -ed */+(
            (this instanceof Array)
            ? ']'
            : (this instanceof Object)
                ? '}'
                : ')'
        );
        return str;
      };
    for(i in objRA=[
        [   'Simple Raw Object source code:',
            '[new Array, new Object, new Boolean, new Number, ' +
                'new String, new RegExp, new Function, new Date]'   ] ,
    
        [   'Literal Instances source code:',
            '[ [], {}, true, 1, "", /./, function(){}, new Date() ]'    ] ,
    
        [   'some predefined entities:',
            '[JSON, Math, null, Infinity, NaN, ' +
                'void(0), Function, Array, Object, undefined]'      ]
        ])
    alert([
        '\n\n\ntesting:',objRA[i][0],objRA[i][1],
        '\n.toSource()',(obj=eval(objRA[i][1])).toSource(),
        '\ntoSource() spoof:',obj.spoof()
    ].join('\n'));
    

    which displays:

    testing:
    Simple Raw Object source code:
    [new Array, new Object, new Boolean, new Number, new String,
              new RegExp, new Function, new Date]
    
    .toSource()
    [[], {}, (new Boolean(false)), (new Number(0)), (new String("")),
              /(?:)/, (function anonymous() {}), (new Date(1303248037722))]
    
    toSource() spoof:
    [[], {}, {}, {}, (new String("")),
              {}, {}, new Date("Tue, 19 Apr 2011 21:20:37 GMT")]
    

    and

    testing:
    Literal Instances source code:
    [ [], {}, true, 1, "", /./, function(){}, new Date() ]
    
    .toSource()
    [[], {}, true, 1, "", /./, (function () {}), (new Date(1303248055778))]
    
    toSource() spoof:
    [[], {}, true, 1, ", {}, {}, new Date("Tue, 19 Apr 2011 21:20:55 GMT")]
    

    and

    testing:
    some predefined entities:
    [JSON, Math, null, Infinity, NaN, void(0), Function, Array, Object, undefined]
    
    .toSource()
    [JSON, Math, null, Infinity, NaN, (void 0),
           function Function() {[native code]}, function Array() {[native code]},
                  function Object() {[native code]}, (void 0)]
    
    toSource() spoof:
    [{}, {}, null, Infinity, NaN, undefined, {}, {}, {}, undefined]
    
    0 讨论(0)
提交回复
热议问题