程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在JSON中存储JavaScript函数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在JSON中存储JavaScript函数?

开发过程中遇到如何在JSON中存储JavaScript函数的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在JSON中存储JavaScript函数的解决方法建议,希望对你解决如何在JSON中存储JavaScript函数有所启发或帮助;

通常,这样的问题表示X / Y问题:您需要执行X,您认为Y会帮助您完成此操作,因此您尝试执行Y,不能执行,并询问如何执行Y。这通常会更多询问如何做X很有用。

但是回答以下问题:您 使用replacer和reviver函数将函数转换为字符串(在过程中Stringify),然后再转换为函数(在过程中parse),以存储函数的字符串版本,但是这样做存在各种问题,不仅如此,定义功能的范围可能对功能很重要。(与您在问题中显示的功能无关紧要,但是我认为这并没有真正的代表性。)并将字符串从本地存储转换为您可以运行的代码意味着您相信本地存储内容没有被恶意破坏。除非页面已经容易受到XSS攻击,否则这不可能,但这是一个需要牢记的问题。

这是一个示例,但是除非用尽其他选项,否则我不建议您这样做,尤其是因为它使用eval,它(像它的近亲new Function)可能是恶意代码的载体:

// The object

var obj = {

    a: 5,

    b: function (param) {

        return param;

    }

};



// Convert to JsON using a replacer function to output

// the String version of a function with /Function(

// in front and )/ at the end.

var Json = JsON.Stringify(obj, function(key, value) {

  if (typeof value === "function") {

    return "/Function(" + value.toString() + ")/";

  }

  return value;

});



// Convert to an object using a reviver function that

// recognizes the /Function(...)/ value and converts it

// into a function via -shudder- `eval`.

var obj2 = JsON.parse(Json, function(key, value) {

  if (typeof value === "String" &&

      value.startsWith("/Function(") &&

      value.endsWith(")/")) {

    value = value.subString(10, value.length - 2);

    return (0, eval)("(" + value + ")");

  }

  return value;

});

document.body.INNERHTML = obj2.b(42);

该构造(0, eval)("(" + value + ")");可确保eval在全局范围而不是在齐磊函数范围内运行。通常,它eval具有使用调用它的范围的魔术功能,但是仅在直接调用它时才有效。如图所示(或仅显示)的间接evalvar e = eval; e("(" + value + ")");功能不具备这种魔术功能,它在全局范围内运行。

解决方法

我有一个JS对象,我想保存在本地存储中以备将来使用,但无法将其解析为字符串。

码:

JSON.Stringify({
    a: 5,b: function (param) {
        return param;
    }
})

结果:

"{"a":5}"

如果不使用JSON,如何保存以备将来使用?

(并创建我自己的Lexer-Parser来中断我不认为是可选的字符串函数)

大佬总结

以上是大佬教程为你收集整理的如何在JSON中存储JavaScript函数全部内容,希望文章能够帮你解决如何在JSON中存储JavaScript函数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。