VM1374:32未捕获的TypeError:将循环结构转换为JSON(...)

时间:2016-11-09 02:07:36

标签: javascript jquery html json reactjs

我是JS的新手。我试图在我的console.log中打印值。我收到以下错误:

VM1374:32 Uncaught TypeError: Converting circular structure to JSON(…)

我的代码如下:

console.log("this.props.children[this.state.selected]---->" + JSON.stringify(this.props.children[this.state.selected]));

1 个答案:

答案 0 :(得分:9)

这是一个非常常见的问题。抛出Converting circular structure to JSON(...)是因为您正在尝试打印出最终通过其中一个属性引用自身的对象。

以下是您可以解决此问题的最简单方法之一JSFiddle

var a = {
  b: null
};

// Prints fine
console.log(JSON.stringify(a, null, 3));

a.b = a;

// Throws an error, as a.b *is* a
console.log(JSON.stringify(a, null, 3));

当您调用JSON.stringify时,浏览器将像一棵大树一样遍历您的对象,像分支一样向下移动每个属性并将其转换为字符串。 在上面的示例中,属性b最初为null,这导致成功的“字符串化”。当我们将a.b设置为a时,我们现在会得到这种树:

a
|-b: a
     |-b: a
          |-b: a
               ...

这种结构是 circular ,因为对象引用了它自己。

表示无法将其写为JSON,因为它会永远存在,因此会出现错误。

对于你的具体问题,这种情况发生在React中,因为React对象引用了他们的父母,这些父母引用他们的孩子,这些孩子引用他们的父母,引用他们的孩子......它会永远持续下去。

因此,您的示例中JSON.stringifythis上的this.props无法使用this.props children具有部分责任的属性this.state对于这个问题)。

您会注意到可以字符串化> JSON.stringify(this.state); "{"selected":0}" ,因为这是一个不引用任何其他React对象的普通对象:

console.log

编辑:最适合你的是JSON.stringify没有console.log("this.props.children[this.state.selected]---->", this.props.children[this.state.selected]);

console.log

您可以向 HA-Proxy version 1.6.9 2016/08/30 Copyright 2000-2016 Willy Tarreau <willy@haproxy.org> Build options : TARGET = linux2628 CPU = generic CC = gcc CFLAGS = -O2 -g -fno-strict-aliasing -DTCP_USER_TIMEOUT=18 OPTIONS = USE_LINUX_TPROXY=1 USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1 USE_PCRE=1 USE_PCRE_JIT=1 Default settings : maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = 200 Encrypted password support via crypt(3): yes Built with zlib version : 1.2.7 Compression algorithms supported : identity("identity"), deflate("deflate"), raw-deflate("deflate"), gzip("gzip") Built with OpenSSL version : OpenSSL 1.0.2j 26 Sep 2016 Running on OpenSSL version : OpenSSL 1.0.2j 26 Sep 2016 OpenSSL library supports TLS extensions : yes OpenSSL library supports SNI : yes OpenSSL library supports prefer-server-ciphers : yes Built with PCRE version : 8.32 2012-11-30 PCRE library supports JIT : yes Built without Lua support Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT IP_FREEBIND Available polling systems : epoll : pref=300, test result OK poll : pref=200, test result OK select : pref=150, test result OK Total: 3 (3 usable), will use epoll. 添加多个参数并用逗号分隔,然后浏览器控制台本身应以可查看的格式打印它。