delete
不删除该对象,它删除引用该对象的属性。在您的move
函数中,由于您刚刚将该对象分配给另一个属性,因此您仍然有该对象。 (无论是以前在数组中的插槽是敬酒,虽然)。
你上面的例子大多是工作的,这里有一个例子(使用自定义的对象,所以我们可以很容易地打印出数组的内容):
function T(id) {
this.id = id;
}
T.prototype.toString = function() {
return this.id;
};
var data = [[new T("0x0"), new T("0x1")],
[new T("1x0"), new T("1x1")]];
display("0: " + data[0].join(","));
display("1: " + data[1].join(","));
display("Moving 0x0 to 1x2");
move(0, 0, 1, 2);
display("0: " + data[0].join(","));
display("1: " + data[1].join(","));
function move(fromx, fromy, tox, toy) {
data[tox][toy] = data[fromx][fromy];
delete data[fromx][fromy];
}
function display(msg) {
var p = document.createElement('p');
p.innerHTML = msg;
document.body.appendChild(p);
}
Live copy
我不会在这种情况下建议delete
,虽然,因为它不太可能是你真正想要的东西。如果您想保留“单元格”但删除其内容,只需将undefined
分配给它。 delete
实际上将其删除。
有些偏离主题,但:JavaScript没有多维数组。你有什么是一个数组的数组。这是一个区别,它实际上有区别,因为最外面的数组保存的数组可以具有不同的长度。 (另外,JavaScript数组是稀疏 —他们并不是真正的数组可言,除非选择使他们因此 —所以阵列可以具有相同的长度,但差距的实现。)
或者,你知道... 'undefined'。 ;-) – 2010-09-25 13:29:01
我发现使用流行/代码文化引用作为未定义的变量是多得多,但有趣。 – 2010-09-25 13:32:28