簡體   English   中英

定義兩個具有相同值的變量

[英]define two variables with the same value

我需要聲明兩個具有相同值的變量,實際上是一個已解析的json。 它們不應引用同一對象。

有沒有比單獨聲明具有相同值的變量更好的方法,即

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

因為我的變量a只是一個非嵌套數組,所以我認為最好的方法是使用

b = a.slice();

要將JSON文本轉換為對象,可以使用eval()函數。 評估功能非常快。 但是,它可以編譯和執行任何JavaScript程序,因此可能存在安全問題。 為了保護它,應該使用JSON解析器。 鏈接

如果查看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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM