定义具有相同值的两个变量

时间:2014-02-13 17:04:21

标签: javascript

我需要声明两个具有相同值的变量,实际上是一个解析过的json。他们不应该引用同一个对象。

有没有比用相同的值分别声明变量更好的方法,即

    var a = JSON.parse(myJson),
        b = JSON.parse(myJson);

2 个答案:

答案 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);