Что означает {content: [Circular] } в JavaScript?

#javascript

#javascript

Вопрос:

Мой код был:

 var chineseBox = {};
chineseBox.content = chineseBox;
 

и он вернул:

 { content: [Circular] }
 

Что это значит?

Комментарии:

1. Это не является частью javascript (Ecmascript) — chineseBox возвращает объект JSON, который указывает, что содержимое является круговым (что бы это ни значило для chineseBox)

2. Он вернул это как? Здесь чего-то не хватает.

3. Вторая строка кода будет вычисляться до значения rvalue , которое равно chineseBox . Точно так же chineseBox.content = 5 будет оцениваться 5 .

4. Интересно в сторону: есть предложение добавить свойство к глобальному объекту JavaScript, которое имеет ключ «global» (чтобы вы могли получить к нему доступ <global object name here>.global ) и которое возвращает глобальный объект (циклическую ссылку). Тогда вы сможете просто вызывать global куда угодно, и поскольку каждое свойство глобального объекта JS доступно только по имени его свойства, запрос for global всегда будет возвращать глобальный объект, независимо от того, какое на самом деле было имя глобального объекта (‘window’, ‘process’, ‘whatever’ и т. Д.)

5. @chelsea как, черт возьми, ты получил дескриптор chelsea twitter: D Я впечатлен.

Ответ №1:

Ваш объект содержит циклическую ссылку. Если вы попытаетесь распечатать (или сериализовать) этот объект, вы окажетесь в бесконечном цикле

 {content: {content: {content ...
 

Вместо этого ваша система была достаточно умна, чтобы заметить цикличность и защитить себя от нее.

Комментарии:

1. Спасибо! и @numbers1311407 это буквально то, как выглядел мой терминал: d.pr/nE8a

2. Круто, это было бы Node.js ; который использует двигатель V8.

Ответ №2:

Это означает, что вы определили циклическую ссылку. Другими словами, переменная, которая ссылается на саму себя.

Другими словами, chineseBox равно chineseBox.content равно chineseBox.content.content равно chineseBox.content.content.content равно chineseBox.content.content.content.content равно chineseBox.content.content.content.content.content равно chineseBox.content.content.content.content.content.content равно chineseBox.content.content.content.content.content.content.content равно chineseBox.content.content.content.content.content.content.content.content равно равно равно равно равно равно равно равно равно chineseBox.content.content.content.content.content.content.content.content.content равно chineseBox.content.content.content.content.content.content.content.content.content.content равно chineseBox.content.content.content.content.content.content.content.content.content.content.content равно chineseBox.content.content.content.content.content.content.content.content.content.content.content.content равно chineseBox.content.content.content.content.content.content.content.content.content.content.content.content.content … и так далее до бесконечности.

Поскольку такая циклическая ссылка совершенно четко не может быть выражена каким-либо конечным образом, [Circular] показан результат. В других языках есть своя фраза для этого термина, например, PHP, который отображает *RECURSION* . В циклических ссылках нет ничего особенно захватывающего, просто большую часть времени они довольно бесполезны.

Ссылка туда и обратно, например, a.thing = b; b.thing = a; может быть полезна для использования в связанных списках или других цепочках, в которых вам нужно иметь возможность перемещаться как назад, так и вперед — опять же, вы можете писать a.thing.thing.thing.thing.thing.thing столько, сколько захотите.

Ответ №3:

Это потому, что chineseBox.content имеет ссылку на chineseBox, который является тем же объектом. Циклическая ссылка…