JSON.stringify(значение[, заменитель[, пробел]])

Согласно документам MDN, JSON.stringify() преобразует значение JavaScript в строку JSON, при необходимости заменяя значения, если указана функция-заменитель, или дополнительно включая только указанные свойства, если указан массив-заменитель.

Когда функция используется в качестве параметра-заменителя, она принимает два параметра: ключ и строковое значение. Объект, в котором был найден ключ, предоставляется в качестве параметра this заменителя. Первоначально он вызывается с пустым ключом, представляющим строковый объект, а затем вызывается для каждого свойства в объекте или массиве, который преобразуется в строку.

Мой вопрос в том, какова цель первого вызова этой функции? В документе не указывается его поведение/воздействие.


person samxyzbac    schedule 13.02.2017    source источник
comment
Не могли бы вы привести несколько примеров, чтобы прояснить ваш вопрос, пожалуйста?   -  person Sunny Patel    schedule 13.02.2017
comment
Забавно, как тщательно они выбирали удобное условие. Он просто сломается, если вы решите использовать что-то еще, например key.indexOf('PUBLIC_') === 0.   -  person Qwerty    schedule 21.02.2018


Ответы (1)


Ознакомьтесь с MSDN на JSON.stringify :

Ключ для корневого объекта представляет собой пустую строку: "".

Так что это просто корневой объект.

Это означает то же самое, что и объяснение на MDN:

Первоначально он вызывается

Это означает, что он вызывается для корневого объекта, который обрабатывается первым.

с пустым ключом

Это пустая строка.

представление строкового объекта

Что снова означает корневой объект.

Обратите внимание, что для атрибута в объекте можно использовать пустой ключ. Так что не думайте, что пустая строка для ключа гарантирует, что корневой объект обрабатывается.

person Claude Martin    schedule 13.02.2017
comment
Спасибо за ваш комментарий, но я до сих пор не могу понять, зачем нам нужен этот пустой ключ, переданный в функцию-заменитель. Есть ли какой-либо вариант использования для этого? Разве свойства и значения не все, что нам нужно для преобразования объекта в строку? - person samxyzbac; 14.02.2017
comment
Объект, который вы передаете для стробирования, не является значением какого-либо атрибута, поэтому ключа нет. Я бы предпочел структуру, которая дает вам полный путь. Например key = ".foo.bar[5].baz"; value = 42. С возможностью получить путь в виде массива: вместо этого key = [ "foo", "bar", 5, "baz" ]. Тогда корневой элемент будет иметь пустой ключ ("" или []). - person Claude Martin; 16.02.2017