ไม่มีคำตอบก่อนที่อยู่ที่ความจริงที่ว่าจาวาสคริปต์ไม่ได้มีการเชื่อมโยงอาร์เรย์จะเริ่มต้นด้วย - ไม่มีประเภทเช่นดูarray
typeof
สิ่งที่ Javascript มีคืออินสแตนซ์ของวัตถุที่มีคุณสมบัติแบบไดนามิก เมื่อคุณสมบัติสับสนกับองค์ประกอบของอินสแตนซ์ของวัตถุ Array ดังนั้น Bad Things ™จะเกิดขึ้น:
ปัญหา
var elements = new Array()
elements.push(document.getElementsByTagName("head")[0])
elements.push(document.getElementsByTagName("title")[0])
elements["prop"] = document.getElementsByTagName("body")[0]
console.log("number of elements: ", elements.length) // returns 2
delete elements[1]
console.log("number of elements: ", elements.length) // returns 2 (?!)
for (var i = 0; i < elements.length; i++)
{
// uh-oh... throws a TypeError when i == 1
elements[i].onmouseover = function () { window.alert("Over It.")}
console.log("success at index: ", i)
}
สารละลาย
ในการมีฟังก์ชั่นการลบอเนกประสงค์ที่ไม่ทำให้คุณระเบิดให้ใช้:
Object.prototype.removeItem = function (key) {
if (!this.hasOwnProperty(key))
return
if (isNaN(parseInt(key)) || !(this instanceof Array))
delete this[key]
else
this.splice(key, 1)
};
//
// Code sample.
//
var elements = new Array()
elements.push(document.getElementsByTagName("head")[0])
elements.push(document.getElementsByTagName("title")[0])
elements["prop"] = document.getElementsByTagName("body")[0]
console.log(elements.length) // returns 2
elements.removeItem("prop")
elements.removeItem(0)
console.log(elements.hasOwnProperty("prop")) // returns false as it should
console.log(elements.length) // returns 1 as it should