javascriptのdelete演算子の挙動


以下のコードを実行するとa[2]の要素が削除されるので最後はlengthが3ではなく2になるはずです。(実際オライリー本の同様のコードではそのようになる旨のコメントが付いている)

[code]

    var a = [1,2,3];
    delete a[2];
    console.log(a.length);
    
[/code]

しかし、Chrome 61.0.3163.100(64ビット)で確かめると最後の結果は2ではなく、3となっています。

実際、以下のコードで配列がどうなっているか確かめると、

[code]

    console.log(a)
    
[/code]

以下のような配列になっていてlengthが3である事が確認できます。

[code]

    [1, 2, empty × 1]
    
[/code]

オライリー本(javascript 第6版 P89)では2になると書かれている以上、仕様が変わったという事でしょうか？それともただ単に誤字なのでしょうか？

もし仕様が変わったのであれば、何故このような仕様になったのでしょうか？




[配列の要素の削除](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/delete#%E9%85%8D%E5%88%97%E3%81%AE%E8%A6%81%E7%B4%A0%E3%81%AE%E5%89%8A%E9%99%A4)でも次のように減らないことが説明されています。

> 配列の要素を削除する際、配列の長さは影響を受けません。

また原書の方ですが[errata](http://www.oreilly.com/catalog/errata.csp?isbn=9780596805531)が出てますね。

> **Note from the Author or Editor:**
>
> Change this line:
[code]

>     a.length  // => 2: array only has two elements now
>  
[/code]

>
> To these two lines:
[code]

>     2 in a        // => false: array element 2 doesn't exist anymore
>     a.length      // => 3: note that array length doesn't change, though
>  
[/code]

>
> Line the comments up with the ones above, of course.

とのことで書籍側の誤りかと。




[配列の要素の削除](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/delete#%E9%85%8D%E5%88%97%E3%81%AE%E8%A6%81%E7%B4%A0%E3%81%AE%E5%89%8A%E9%99%A4)でも次のように減らないことが説明されています。

> 配列の要素を削除する際、配列の長さは影響を受けません。

また原書の方ですが[errata](http://www.oreilly.com/catalog/errata.csp?isbn=9780596805531)が出てますね。

> **Note from the Author or Editor:**
>
> Change this line:
[code]

>     a.length  // => 2: array only has two elements now
>  
[/code]

>
> To these two lines:
[code]

>     2 in a        // => false: array element 2 doesn't exist anymore
>     a.length      // => 3: note that array length doesn't change, though
>  
[/code]

>
> Line the comments up with the ones above, of course.

とのことで書籍側の誤りかと。

