Javascriptの未定義とnullについて少し混乱しています。
null
通常、帯域外の「null」、「nil」、または「None」オブジェクトの他のスクリプト言語の概念と同様に動作します。
undefined
一方、は奇妙な JavaScript の癖です。これは帯域外の値を表すシングルトン オブジェクトであり、基本的には 2 番目の similar-but-differentnull
です。出てきます:
function
ステートメント リストの引数リストよりも少ない引数で関数を呼び出すと、渡されなかった引数は に設定されundefined
ます。たとえば、次のようにテストできます。
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
dosomething(1)
この方法では、との違いがわかりませんdosomething(1, undefined)
。arg2
両方で同じ値になります。違いを見分ける必要がある場合は、 を見ることができますがarguments.length
、そのようなオプションの引数を行うことは、一般的にあまり読みにくいです。
関数に がない場合はreturn value;
、 が返されますundefined
。通常、このような戻り値を使用する必要はありません。
ブロック内にステートメントを入れて変数を宣言したvar a
が、まだ値を割り当てていない場合、それはundefined
. 繰り返しますが、これに頼る必要はありません。
spooky演算子は、そのオペランドが存在しない単純な変数である場合にtypeof
戻ります。参照しようとした場合に通常発生するエラーをスローするのではありません。'undefined'
(括弧で囲まれた単純な変数を指定することもできますが、存在しない変数を含む完全な式を指定することはできません。) それもあまり役に立ちません。
これは物議を醸すものです。存在しないオブジェクトのプロパティにアクセスしても、他のすべての言語のようにすぐにエラーになることはありません。代わりに、undefined
オブジェクトを取得します。(そして、undefined
後でスクリプトでそのオブジェクトを使用しようとすると、JavaScript がすぐにエラーをスローした場合よりも追跡がはるかに困難な奇妙な方法で問題が発生します。)
これは、プロパティの存在を確認するためによく使用されます。
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
undefined
ただし、他の値と同じように割り当てることができるため:
o.prop= undefined;
プロパティが確実に存在するかどうかを実際には検出しません。in
JavaScript の元の Netscape バージョンにはありませんでしたが、現在はどこでも使用できる演算子を使用することをお勧めします。
if ('prop' in o)
...
要約すると、undefined
これは JavaScript 固有の混乱であり、誰もが混乱します。オプションの関数引数は別として、JS には他に洗練されたメカニズムがないため、これundefined
は避けるべきです。それは決して言語の一部であってはなりません。null
(2) と (3) については問題なく動作し、(4) は最初は JavaScript に例外がなかったためにのみ存在する誤機能です。
実際には何をしif (!testvar)
ますか?未定義とnullまたは未定義のみをテストしますか?
このような「真実性」テストは、、、、、および空の文字列に対してfalse
チェックします。しかし、この場合、そうです、それは本当に関係しています。IMO、それについてもっと明確にして、.undefined
null
0
NaN
undefined
if (testvar!==undefined)
変数が定義されたら、それをクリアして未定義に戻すことができます(したがって、変数を削除します)。
確かに代入できますがundefined
、変数は削除されません。delete object.property
実際に物を取り除くのはオペレーターだけです。
delete
変数自体ではなく、実際にはプロパティを対象としています。ブラウザーは Straight を使用できますがdelete variable
、これは良い考えではなく、ECMAScript 第 5 版の厳密モードでは機能しません。何かへの参照を解放してガベージ コレクションできるようにする場合は、variable= null
.
パラメータとして undefined を渡すことはできますか?
はい。