[javascript] 陣列與物件,delete與splice差異

在 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.prototype.name="camel_in_prototype";
    var obj={ 'name': 'camel };
    console.log(obj.name);     // camel
    delete obj.name;
    console.log(obj.name);     // camel_in_prototype
    delete obj.name;
    console.log(obj.name);     // camel_in_prototype 
    
  • splice(index,howmany,item1,…..,itemX)
    Array 原型的一個方法
    可以選定元素後,向后刪除多個元素或插入新元素
    如:

    var array=[ 'a', 'b', 'c', 'd' ];
    array.splice(2, 1, 'e'); // 刪除 'c',新增 'e'
    console.log(array);     // [ 'a', 'b', 'e' , 'd' ]
    
  • 比較 delete 與 splice 應用在 array 上的差別
    splice:

    var array=[ 'a', 'b', 'c', 'd' ];
    array.splice(2, 1);      // 刪除 'c'
    console.log(array.length);     // 3
    console.log(array);      // [ 'a', 'b', 'd' ]
    

    delete:

    var array=[ 'a', 'b', 'c', 'd' ];
    delete array[2];    // 刪除 'c'
    console.log(array.length);     // 4
    console.log(array[2]);         // 'undefined'
    

參考資料:

https://github.com/dreamline2/Front_End_Exchange/wiki/%E4%BD%BF%E7%94%A8-delete-%E5%88%AA%E9%99%A4%E7%89%A9%E4%BB%B6%E7%9A%84-%22%E5%B1%AC%E6%80%A7%22-%E5%8F%8A-%22%E6%96%B9%E6%B3%95%22

http://guang.logdown.com/posts/278890-javascript-array-vs-object

One thought on “[javascript] 陣列與物件,delete與splice差異

Leave a Reply

Your email address will not be published. Required fields are marked *