Почему это ничего не дает?
console.log(JSON.stringify(function(){console.log('foobar');}));
Почему это ничего не дает?
console.log(JSON.stringify(function(){console.log('foobar');}));
JSON не может полностью выполнять функции, он обрабатывает их точно так же, как значения undefined
или null
. Вы можете проверить точный алгоритм в EcmaScript 5.1 §15.12.3, см. Также описание в MDN.
Однако вы, конечно, можете выразить выражение функции, выставив их в строку, попробуйте
console.log("" + function(){console.log('foobar');})
У JSON нет средств для представления функции. Это формат данных, разработанный для простоты и совместимости между языками (и функция является последней вещью, которая будет совместима между языками).
Из документов JSON.stringify:
Если значение undefined, при преобразовании встречается функция или значение XML, оно либо опускается (когда оно найдено в объекте), либо подвергается цензуре на ноль (когда оно находится в массиве).
Вы не можете этого сделать, но некоторые сторонние библиотеки могут вам помочь, например: https://www.npmjs.com/package/json-fn
yourFunctionName.toString();
также приведёт в порядок функцию
Если вы хотите использовать 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
из функции конвертера, если хотите опустить результат.
Третий параметр - это количество пробелов, которые вы хотите сделать для отступа (необязательно).