在 javascript 有分為物件與陣列,常見刪除的方法有 delete 與 splice。
陣列
var array=[ 'a', 'b', 'c', 'd' ];
console.log(a[0]); // a
物件
var object={ 0: 'a', 1: 'b', 2: 'c', 3: 'd' };
console.log(object[0]); // a
兩個其實很像都是 key-value ,但其實兩個繼承的 prototype 方法不同( Array 與 Object )
因此:
console.log(array.length); // 4
console.log(object.length); // undefined
但透過 typeof 來看的話其實兩個都屬於 object,因此我們必須透過 contrustor 來判斷彼此的不同
console.log(typeof array); // object
console.log(typeof object); // object
console.log(array.contrustor);
console.log(array.constructor === Array); // true
console.log(object.constructor === Array); // false
delete 與 splice
delete使用在Object
使用 delete 去刪除物件內的 "屬性" 或 "方法",它只會移除你所指定物件內的 "屬性" 或 "方法"(如果這個物件有的話),並不會刪除到物件"原型"內原有的 "屬性" 及 "方法"。
Object.prototype.name = 'Terry_in_prototype';
var obj = { 'name' : 'Terry' };
console.log(obj.name); //Terry
delete obj.name;
console.log(obj.name); //Terry_in_prototype
//在 delete 一次
delete obj.name;
console.log(obj.name); //Terry_in_prototype
比較 delete 與 splice 應用在 array 上的差別
splice
array.splice(index
, howmany
, item1, ....., itemX
)
index
:需要。一個整數,指定要在什麼位置添加/刪除項目,請使用負值指定從數組末尾開始的位置。
howmany
:可選的。要刪除的項目數。 如果設置為0,則不會刪除任何項目。
item
:可選的。要添加到數組中的新項目。
var array=[ 'a', 'b', 'c', 'd' ];
array.splice(2, 1); //刪除 'c'
console.log(array.length); //3
console.log(array); /*[ 'a', 'b', 'd' ]*/
var months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb'); //inserts at index 1
console.log(months); /*['Jan', 'Feb', 'March', 'April', 'June']*/
months.splice(4, 1, 'May'); //replaces 1 element at index 4
console.log(months); /*['Jan', 'Feb', 'March', 'April', 'May']*/
delete
var array=[ 'a', 'b', 'c', 'd' ];
delete array[2]; // 刪除 'c'
console.log(array.length); // 4
console.log(array[2]); // 'undefined'
參考資料:
使用 delete 刪除物件的 "屬性" 及 "方法"
Javascript 陣列vs物件
javascript陣列與物件,delete與splice差異