Translate namespace to object

Using a namespace like a.b.c.d and a value 123 make an object { a : { b: { c: {d: 123 } } } }

by dandoyon

HTML

<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<ul id="results"></ul>

CSS

#results li.pass { color: green; }
#results li.fail { color: red; }

JavaScript

function assert(value, desc) {
    var li = document.createElement("li");
    li.className = value ? "pass" : "fail";
    li.appendChild(document.createTextNode(desc));
    document.getElementById("results").appendChild(li);
}

var target = {
    nsToObject: function(properties, val) {
        if(_.isString(properties)) {
            return arguments.callee(properties.split("."), val);
        }
        var container = {};
        var prop = properties.shift();
        if(properties.length > 0) {
            container[prop] = arguments.callee(properties,val);
        } else {
            container[prop] = val;       
        }
        return container;
    }
};
var actual = target.nsToObject(['a','b','c','d'], 123);
assert(actual.a.b.c.d == 123, "[a,b,c,d] correctly = 123");

actual = target.nsToObject("a.b.c.d", 123);
assert(actual.a.b.c.d == 123, "'a.b.c.d' correctly = 123");

actual = target.nsToObject("a", 123);
assert(actual.a == 123, "'a' correctly = 123");

actual = target.nsToObject(['a'], 123);
assert(actual.a == 123, "[a] correctly = 123");

actual = target.nsToObject('', 123);
assert(actual[''] == 123, "'' correctly = 123");

actual = target.nsToObject([''], 123);
assert(actual[''] == 123, "[''] correctly = 123");