我是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]));
答案 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.stringify
或this
上的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.
添加多个参数并用逗号分隔,然后浏览器控制台本身应以可查看的格式打印它。