我需要声明两个具有相同值的变量,实际上是一个解析过的json。他们不应该引用同一个对象。
有没有比用相同的值分别声明变量更好的方法,即
var a = JSON.parse(myJson),
b = JSON.parse(myJson);
答案 0 :(得分:0)
因为我的变量a只是一个非嵌套数组,我认为最好的方法是使用
b = a.slice();
答案 1 :(得分:0)
要将JSON文本转换为对象,可以使用eval() 功能。 eval功能非常快。但是,它可以编译和 执行任何JavaScript程序,因此可能存在安全问题。为了防御它,应该使用JSON解析器。 (link)
如果你看一下JSON.parse(由Doughlas Crockford提供),它主要为eval准备一个字符串。所以你可以保存准备好的字符串&使用eval。
JSON.prepare = function(text) {
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
cx.lastIndex = 0;
if (cx.test(text)) {
text = text.replace(cx, function (a) {
return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
});
}
if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
return '(' + text + ')';
}
};
并将其用作:
myJson = JSON.prepare(myJson);
var a = eval(myJson),
b = eval(myJson);