Вопрос

Почему это не производит ничего?

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 не имеет средств для представления функции.Это формат данных, предназначенный для простоты и совместимости по отношению к языкам (и функция - это последнее, что будет совместимым с перекрестным языком).

из документов для 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(); также будет строгать функцию

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top