Почему вы не можете строить функцию?
-
11-12-2019 - |
Вопрос
Почему это не производит ничего?
console.log(JSON.stringify(function(){console.log('foobar');}));
. Решение
JSON не может вообще строгать функции, это обрабатывает их так же, как undefined
или значения null
.Вы можете проверить точный алгоритм в ecmascript 5.1 §15.12.3 Также см. Также Описание в MDN .
Другие советы
JSON не имеет средств для представления функции.Это формат данных, предназначенный для простоты и совместимости по отношению к языкам (и функция - это последнее, что будет совместимым с перекрестным языком).
из документов для Docs для json.stringify :
Если undefined, функция или значение XML встречается во время преобразования, его либо опущено (когда он находится в объекте), либо подвергается цензуре, чтобы нулевым (когда он найден в массиве).
Вы не можете этого сделать, но есть некоторые сторонние библиотеки могут помочь вам сделать это, например: https://www.npmjs.com/package/json-fn
Если вы хотите использовать JSON.stringify
, чтобы также конвертировать функции и собственные объекты, которые вы можете передавать функцию преобразователя в качестве второго аргумента:
const data = {
fn: function(){}
}
function converter(key, val) {
if (val && typeof val === 'function' || val.constructor === RegExp) {
return String(val)
}
return val
}
console.log(JSON.stringify(data, converter, 2))
.
Вернуть undefined
из функции преобразователя, если вы хотите опустить результат.
Третий параметр - сколько пробелов вы хотите вывести отступ (необязательно).
yourFunctionName.toString();
также будет строгать функцию