将对象转换为字符串

IT技术 javascript string object serialization tostring
2021-01-15 16:02:40

如何将 JavaScript 对象转换为字符串?

例子:

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

输出:

Object { a=1, b=2} // 非常好的可读输出 :)
Item: [object Object] // 不知道里面是什么 :(

6个回答

我建议使用JSON.stringify,它将对象中的变量集转换为 JSON 字符串。大多数现代浏览器本机支持此方法,但对于那些不支持的浏览器,您可以包含一个JS 版本

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);
供参考 IE6 和 7 不支持此功能。IE6 并不是什么大问题,因为用户很少,并且有一个积极的活动来扼杀它……但是仍然有相当多的 IE7 用户(取决于您的用户群)。
2021-03-15 16:02:40
如果从 StackOverflow 中单击,指向 JSON 库的链接将不起作用。将其复制并粘贴到地址栏中。
2021-03-15 16:02:40
我收到“未捕获的类型错误:将循环结构转换为 JSON”。即使有循环引用,我仍然希望看到我的对象的字符串表示。我能做什么?
2021-03-19 16:02:40
如果对象具有函数属性,则这不起作用,例如:foo: function () {...}
2021-03-29 16:02:40
您可以使用JSON.stringify(obj, null, 2);更漂亮的输出。
2021-04-06 16:02:40

使用 javascript String()函数

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

字符串化()

JSON.stringify(yourobject)
@VikramPote 我认为没有办法将对象从"[object Object]"..
2021-03-18 16:02:40
如果你想要整个对象作为字符串使用 JSON.stringify(foo)
2021-03-28 16:02:40
var foo = {bar: 1}; String(foo['bar']); -> "1"
2021-04-02 16:02:40
JSON.stringify 并不适合所有情况,例如按钮等输入字段的 jQuery 引用对象。
2021-04-05 16:02:40
var foo = {bar: 1}; 字符串(富);->“[对象对象]”
2021-04-09 16:02:40

当然,要将对象转换为字符串,您必须使用自己的方法,例如:

function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}

其实,上面只是展示了一般的做法;您可能希望使用类似http://phpjs.org/functions/var_export:578http://phpjs.org/functions/var_dump:604 的东西

或者,如果您不使用方法(作为对象属性的函数),您可以使用新标准(但未在旧浏览器中实现,但您也可以找到一个实用程序来帮助它们),JSON .stringify()。但同样,如果对象使用不可序列化为 JSON 的函数或其他属性,那将不起作用。

更新

更现代的解决方案是:

function objToString (obj) {
    let str = '';
    for (const [p, val] of Object.entries(obj)) {
        str += `${p}::${val}\n`;
    }
    return str;
}

或者:

function objToString (obj) {
    return Object.entries(obj).reduce((str, [p, val]) => {
        return `${str}${p}::${val}\n`;
    }, '');
}

保持简单console,您可以只使用逗号而不是++会尝试将对象转换为字符串,而逗号将在控制台中单独显示它。

例子:

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

输出:

Object { a=1, b=2}           // useful
Item: [object Object]        // not useful
Item:  Object {a: 1, b: 2}   // Best of both worlds! :)

参考:https : //developer.mozilla.org/en-US/docs/Web/API/Console.log

console.log最终调用Printer了规范所指出的称为 the 的东西:“实现如何打印 args 取决于实现”——这意味着每个浏览器都可以做到这一点(参见console.spec.whatwg.org/#printer)。Firefox 将对象显示为字符串,但颜色很好。Chrome 会将对象显示为一个交互式组,您可以展开该组以查看属性。试一试!
2021-03-12 16:02:40
伟大的解决方案!但是你能告诉我当你简单地这样做时在幕后发生了什么console.log(o)因为如果您尝试记录添加到 string 的对象,它实际上会调用toString()该对象。
2021-03-26 16:02:40
非常好的技巧,对于现代网络浏览器来说可能很好,但对于所有 JS 实现来说,它并不是 100% 可靠的。例如,在实现 JS 引擎的 Qt QML 中,输出console.log('Item: ', o);仍然是Item: [object Object].
2021-03-31 16:02:40
相反的console.log,你可以使用console.dir(o)打印的JavaScript对象,而不是到printig它作为一个字符串。在开发人员工具中,这可以打开对象并检查所有属性,甚至是数组。(参见:developer.mozilla.org/de/docs/Web/API/Console/dir
2021-04-01 16:02:40

编辑 不要使用此答案,因为它仅适用于某些版本的 Firefox。没有其他浏览器支持它。使用Gary Chambers解决方案。

toSource()是您正在寻找的函数,它将把它写成 JSON。

var object = {};
object.first = "test";
object.second = "test2";
alert(object.toSource());
toSource() 不是公认的标准,因此不能保证在所有浏览器中都受支持。
2021-03-18 16:02:40
虽然在 Firefox 中调试方便,toSource()但在 IE 中不起作用。
2021-03-19 16:02:40
我希望我能给你更多的支持,因为对于有 javascript 的环境来说,这是一个绝妙的解决方案(但控制台日志不方便/无法访问)。
2021-03-20 16:02:40
啊,谢谢你指出这一点。我会把我的答案留在这里给其他不知道的人。
2021-03-28 16:02:40
这在任何现代浏览器上都不支持,这是怎么得到这么多赞的?我错过了什么吗?developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-04-08 16:02:40