有可能吗?我需要使用函数表达式对js对象进行字符串化,其他字段上的所有值类型都不会更改。
示例:
我有这样的javascript对象 -
var obj = {
propText: "some text",
propBool: true,
propNum: 12345,
method: function () {
// some logic here
}
};
不幸的是,如果我使用JSON.stringify(obj);
,它将返回不带method
的字符串..
然后我可以使用这样的替换器功能:
JSON.stringify(obj, function (key, val) {
if (typeof val === 'function') {
return '' + val;
}
return val;
});
这会给我带来像"function () { ... }"
..
我尝试的另一个选项更复杂但结果仍然有点不可接受 - 使用自定义stringify
函数将包装JSON.stringify
然后替换字符串中的占位符
var stringify = function (obj, prop) {
var placeholder = '____PLACEHOLDER____';
var fns = [];
var json = JSON.stringify(obj, function(key, value) {
if (typeof value === 'function') {
fns.push(value);
return placeholder;
}
return value;
});
json = json.replace(new RegExp('"' + placeholder + '"', 'g'), function(_) {
return fns.shift();
});
return json;
};
但是这个函数是不可接受的,例如,如果你传递另一个值:
JSON.stringify(22); // outputs 22 typeof number
stringify(22); // outputs 22 typeof function because of .replace() :(
我希望我的字符串化对象看起来像:
'{
"propText": "some text",
"propBool": true,
"propNum": 12345,
"method": function () { ... }
}'