Javascript通过URL传递对象

var aaa = {
    bbb : 123,
    ccc : 'cccc',
    ddd : new Boolean("true"),
    eee : {
        eee1 : 987,
        eee2 : 'eeestr',
        eee3 : {
            fff1 : 346,
            fff2 : 'ffffff222',
            fff3 : new Number(23)
        }
    }
};


function toParameter(obj){
    if(obj === null || obj === undefined){
        return '';
    }
    if(obj instanceof Number || obj instanceof Boolean || obj instanceof String){
        return obj.valueOf();
    }
    var url = [];
    var value;
    for(var name in obj){
        switch(typeof obj[name]){
            case 'string' :
            case 'number' :
            case 'boolean' :
                value = obj[name].toString();
                break;
            case 'object' :
                value = arguments.callee(obj[name]);
                break;
            case 'function' :
            case 'undefined' :
                value = '';
        }
        url.push(name + '=' + encodeURIComponent(value));
    }
    return url.join('&');
}

function parseParameter(para){
    if(para.indexOf('=') == -1){
        return para;
    }
    var obj = {}, len, i, onePara, name, value;
    paraArr = para.split('&');
    len = paraArr.length;
    for(i = 0; i < len; i++){
        onePara = paraArr[i];
        onePara = onePara.split('=');
        name = onePara[0];
        value = arguments.callee(decodeURIComponent(onePara[1]));
        obj[name] = value;
    }
    return obj;
}


var parameter = toParameter(aaa);

alert(parseParameter(parameter).eee.eee3.fff3);

  

原文地址:https://www.cnblogs.com/realwall/p/2197153.html