将Javascript对象(包括函数)转换为String

mar*_*usf 24 javascript

嘿,我试图将特定的javascript对象转换为String.到目前为止,我正在使用json2.js.只有我的对象包含函数,这些函数才会被剥离.我需要一种转换功能的方法,任何想法?

firefox中的函数有一个toString()方法,但如何使用json2.js?

its*_*ony 35

实际上,我认为这是可能的,也很容易.至少在使用nodeJS做jsonP时,它对我很有用,并且可以通过以下小提琴来证明.我只是通过向函数添加字符串来实现:

var anyString = '';
var aFunction = function() { return true; };
var functionToText = anyString + aFunction;
console.log(functionToText);
Run Code Online (Sandbox Code Playgroud)

这是小提琴:http://jsfiddle.net/itsatony/VUZck/

  • @RequiredCheese迭代对象时它确实有效,你只是迭代你定义的数组,而不是对象的成员.更新小提琴:http://jsfiddle.net/VUZck/17/ (3认同)

Mil*_*dfx 20

使用String()函数http://www.w3schools.com/jsref/jsref_string.asp

var f = function(a, b){
    return a + b; 
}
var str = String(f);
Run Code Online (Sandbox Code Playgroud)


mae*_*ics 8

简短的回答是,您无法将任意JavaScript函数转换为字符串.期.

有些运行时非常友好,可以为您定义函数的字符串序列化,但ECMAScript语言规范并不要求这样做.您提到的"toString()"示例是一个很好的示例,说明为什么无法完成 - 代码内置于解释器中,实际上可能无法在JavaScript中实现(而是实现运行时的语言)!还有许多其他函数可能具有相同的约束(例如构造函数,内置函数等).

  • 事实上,`Function.prototype.toString()`是由规范定义的. (2认同)
  • @Pumbaa:当然,为每个对象定义了`toString()`方法,但没有要求它序列化OP隐含的方法体或指令. (2认同)

SIM*_*MDD 8

使用以下函数将 obj 转换为 str :

function convert(obj) {
  let ret = "{";

  for (let k in obj) {
    let v = obj[k];

    if (typeof v === "function") {
      v = v.toString();
    } else if (v instanceof Array) {
      v = JSON.stringify(v);
    } else if (typeof v === "object") {
      v = convert(v);
    } else {
      v = `"${v}"`;
    }

    ret += `\n  ${k}: ${v},`;
  }

  ret += "\n}";

  return ret;
}
Run Code Online (Sandbox Code Playgroud)

输入

const input = {
  data: {
    a: "@a",
    b: ["a", 2]
  },

  rules: {
    fn1: function() {
      console.log(1);
    }
  }
}

const output = convert(input)
Run Code Online (Sandbox Code Playgroud)

输出

`{
  data: {
    a: "@a",
    b: ["a", 2]
  },
  rules: {
    fn1: function() {
      console.log(1);
    }
  }
}`

// typeof is String
Run Code Online (Sandbox Code Playgroud)

  • 你如何将其转换回来? (2认同)