1

この質問への回答を読んで、要素の値をdelete設定することを理解しています。undefined

したがって、配列がある場合: a = [1, 2, 3](少なくとも) クライアント側delete a[1]で配列を使用すると、クライアント側[1, undefined x 1, 3]では trueになります

NodeJS で何が起こるか?

しかし、NodeJS (サーバー側) で同じ操作をテストすると、次のようになります。

$ node
> a = [1, 2, 3]
[ 1, 2, 3 ]
> delete a[1]
true
> a
[ 1, , 3 ]
> a[1] = undefined
undefined
> a
[ 1, undefined, 3 ]
> 

したがって、a[1] = undefined未定義の値を設定します。しかし、2 つのコンマ ( ) の間のスペースは何を意味するの[1, , 3]でしょうか? deleteそれを置く!なんで?

スペースは を意味すると思いますが、未定義として設定しただけでundefined表示されないのはなぜですか?undefined

なぜこうなった?

4

2 に答える 2

3

配列エントリで使用するdeleteと、そのエントリが配列から削除されます。配列の長さは変更されませんが、配列内のそのスロットはなくなります。そのスロットの値を見ようとすると、それをundefined削除することは、それを に設定することとまったく同じではないように見えますundefined。配列エントリの削除については、こちらを参照してください(サブタイトルの「配列要素の削除」までスクロールします)。

deleteこのリファレンスでは、配列エントリで使用する場合と に設定する場合の違いについても説明していundefinedます。違いは微妙で、いくつかの状況でのみ違いが生じます。その記事の例を次に示します。

// using delete
var trees = ["redwood","bay","cedar","oak","maple"];

delete trees[3];
if (3 in trees) {
    // this does not get executed
}

// setting to undefined
var trees = ["redwood","bay","cedar","oak","maple"];
trees[3]=undefined;
if (3 in trees) {
    // this gets executed
}

したがって、このコンソール出力:

[ 1, , 3 ]

2 番目の配列エントリが欠落していることを示しています (完全になくなっています)。

この記事http://perfectionkills.com/understanding-delete/deleteを参照して、オペレーターが他の状況でどのように機能するかを完全に説明してください。

于 2013-10-06T09:09:47.803 に答える