Deleting array elements in JavaScript - delete vs splice

后端 未结 27 3596
予麋鹿
予麋鹿 2020-11-21 05:31

What is the difference between using the delete operator on the array element as opposed to using the Array.splice method?

For example:

myArray = [\         


        
27条回答
  •  迷失自我
    2020-11-21 06:32

    They're different things that have different purposes.

    splice is array-specific and, when used for deleting, removes entries from the array and moves all the previous entries up to fill the gap. (It can also be used to insert entries, or both at the same time.) splice will change the length of the array (assuming it's not a no-op call: theArray.splice(x, 0)).

    delete is not array-specific; it's designed for use on objects: It removes a property (key/value pair) from the object you use it on. It only applies to arrays because standard (e.g., non-typed) arrays in JavaScript aren't really arrays at all*, they're objects with special handling for certain properties, such as those whose names are "array indexes" (which are defined as string names "...whose numeric value i is in the range +0 ≤ i < 2^32-1") and length. When you use delete to remove an array entry, all it does is remove the entry; it doesn't move other entries following it up to fill the gap, and so the array becomes "sparse" (has some entries missing entirely). It has no effect on length.

    A couple of the current answers to this question incorrectly state that using delete "sets the entry to undefined". That's not correct. It removes the entry (property) entirely, leaving a gap.

    Let's use some code to illustrate the differences:

    console.log("Using `splice`:");
    var a = ["a", "b", "c", "d", "e"];
    console.log(a.length);            // 5
    a.splice(0, 1);
    console.log(a.length);            // 4
    console.log(a[0]);                // "b"

    console.log("Using `delete`");
    var a = ["a", "b", "c", "d", "e"];
    console.log(a.length);            // 5
    delete a[0];
    console.log(a.length);            // still 5
    console.log(a[0]);                // undefined
    console.log("0" in a);            // false
    console.log(a.hasOwnProperty(0)); // false

    console.log("Setting to `undefined`");
    var a = ["a", "b", "c", "d", "e"];
    console.log(a.length);            // 5
    a[0] = undefined;
    console.log(a.length);            // still 5
    console.log(a[0]);                // undefined
    console.log("0" in a);            // true
    console.log(a.hasOwnProperty(0)); // true


    * (that's a post on my anemic little blog)

提交回复
热议问题