変数を undefined に設定したり、引数として undefined を渡したりできますか? 質問する

変数を undefined に設定したり、引数として undefined を渡したりできますか? 質問する

JavaScriptundefinednull値について少し混乱しています。

は実際には何if (!testvar)をするのでしょうか? および をテストするのでしょうかundefinednullそれとも だけでしょうかundefined?

変数を定義したら、それをクリアしてundefined(つまり変数を削除して)戻すことはできますか?

undefinedパラメータとして渡すことはできますか? 例:

function test(var1, var2, var3) {

}

test("value1", undefined, "value2");

ベストアンサー1

Javascript の undefined と null について少し混乱しています。

null一般的に、他のスクリプト言語の帯域外の「null」、「nil」、または「None」オブジェクトの概念と同様に動作します。

undefined一方、 は奇妙な JavaScript の癖です。これは帯域外の値を表すシングルトン オブジェクトであり、本質的には 2 番目の類似しているが異なる ですnull。次のようになります。

  1. ステートメント リスト内の引数リストよりも少ない引数で関数を呼び出すとfunction、渡されなかった引数は に設定されますundefined。これは次のようにしてテストできます。

    function dosomething(arg1, arg2) {
        if (arg2===undefined)
        arg2= DEFAULT_VALUE_FOR_ARG2;
        ...
    }
    

    この方法では、dosomething(1)との違いがわかりませんdosomething(1, undefined)arg2は両方とも同じ値になります。 の違いを確認する必要がある場合は を確認できますarguments.lengthが、そのようにオプションの引数を使用すると、一般的に読みにくくなります。

  2. 関数に がない場合return value;、 が返されますundefined。通常、このような戻り結果を使用する必要はありません。

  3. var aブロック内にステートメントを置いて変数を宣言したが、まだ値を割り当てていない場合は、 になりますundefined。繰り返しますが、これに頼る必要はまったくありません。

  4. 不気味なtypeof演算子は、'undefined'オペランドが存在しない単純な変数である場合に、参照しようとした場合に通常発生するエラーをスローするのではなく、戻り値を返します。(括弧で囲まれた単純な変数を指定することもできますが、存在しない変数を含む完全な式を指定することはできません。) これもあまり役に立ちません。

  5. これは議論の余地のあるものです。存在しないオブジェクトのプロパティにアクセスしても、他の言語のようにすぐにエラーが発生することはありません。代わりにオブジェクトが返されますundefined。(その後、スクリプト内でそのオブジェクトを使用しようとすると、undefinedJavaScript がすぐにエラーをスローした場合よりも追跡がはるかに困難な奇妙な方法でエラーが発生します。)

    これは、プロパティの存在を確認するためによく使用されます。

    if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
       ...do something...
    

    ただし、undefined他の値と同じように割り当てることができます。

    o.prop= undefined;
    

    実際には、プロパティが存在するかどうかを確実に検出するわけではありません。Netscapeinの JavaScript のオリジナル バージョンにはなかったものの、現在ではどこでも使用できる演算子を使用する方がよいでしょう。

    if ('prop' in o)
        ...
    

要約すると、undefinedこれは JavaScript 特有の混乱で、誰もが混乱します。オプションの関数引数は別として、JS には他にもっとエレガントなメカニズムがないので、undefined避けるべきです。これは言語の一部であるべきではありませんでした。null(2) と (3) では問題なく機能したはずです。(4) は、JavaScript の初期に例外がなかったために生じた誤った機能です。

は実際に何if (!testvar)をするのでしょうか? undefined と null をテストするのでしょうか、それとも undefined だけをテストするのでしょうか?

このような「真偽」テストはfalse、、、、および空の文字列に対してチェックします。しかし、この場合、はい、それは本当にそれが関係しているということですundefined。私見では、それについてはもっと明確にnullして、と言うべきです。0NaNundefinedif (testvar!==undefined)

変数を定義したら、それを未定義に戻す(つまり変数を削除する)ことはできますか。

確かundefinedに代入することはできますが、それでは変数は削除されません。delete object.property演算子だけが実際に削除します。

deleteは、変数というよりもプロパティ用です。ブラウザでは を直接使用しても問題ありませんdelete variableが、これは良い考えではなく、ECMAScript 第 5 版の厳密なモードでは機能しません。何かへの参照を解放してガベージ コレクションできるようにする場合は、 を使用する方が一般的ですvariable= null

undefined をパラメータとして渡すことはできますか?

はい。

おすすめ記事