2

我有这样的功能:

Session.get = function(key) {
    if (!window["_SESSION"] || typeof key == 'undefined') {
        return window["_SESSION"] || {};
    }

    if (key.indexOf('.') === -1) {
        return window["_SESSION"][key] || {};
    }

    var keyArr = key.split('.'), val = window["_SESSION"];

    for ( var i = 0; i < keyArr.length; i++) {
        if (typeof val[keyArr[i]] === 'undefined') {
            return null;
        }
        val = val[keyArr[i]];
    }

    return val;
}

这个函数允许我在函数之外没有临时变量的情况下获取嵌套值。示例Session.get('var.nestedvar')是返回值window[_SESSION']['var']['nestedvar']

蝙蝠我怎么能像这样(取消)设置变量?尝试delete val;但没有用.. javascript 引用是如何工作的?有人知道完成类似功能的任何替代方法吗?

4

2 回答 2

2

您可以像这样按父级删除:

[10:00:00.380] a = {'root': {'home':'~'}}
[10:00:00.385] ({root:{home:"~"}})
--
[10:00:09.625] b = a['root']
[10:00:09.631] ({home:"~"})
--
[10:00:20.569] delete b['home']
[10:00:20.573] true
[10:00:21.684] a
[10:00:21.688] ({root:{}})
于 2012-05-22T07:00:42.533 回答
1

您可以对现有代码稍作修改,如下所示:

Session.delete = function(key) {
    if (!window["_SESSION"] || typeof key == 'undefined') {
        return false;
    }
    if (key.indexOf('.') === -1) {
        if (key) {
            delete key;
            return true;
        }
    }

    var keyArr = key.split('.'), val = window["_SESSION"];

    var keyDepth = keyArr.length;
    for ( var i = 0; i < keyDepth-1; i++) {
        if (typeof val[keyDepth] === 'undefined') {
            return null;
        }
        val = val[keyDepth];
    }
    if (val[keyDepth-1]) {
        delete val[keyDepth-1];
        return true;
    }
    return false;
}
于 2012-05-22T07:27:27.807 回答