18

null私はJavaScriptを数年間使用しており、以前との違いを気にすることはありませんでしundefinedた。私は常にundefinedオブジェクトの存在を検証するために使用します。

しかし最近、私はこの記事に出くわしました。ここで彼らは言った

JavaScriptは、意図的な非値を示す「object」型のオブジェクトであるnullと、初期化されていない値を示す「undefined」型のオブジェクトであるundefinedを区別します。つまり、値はまだ設定されていません。まだ割り当てられています。変数については後で説明しますが、JavaScriptでは、値を割り当てずに変数を宣言することができます。これを行うと、変数の型は未定義になります。

私は今完全に混乱しています、ここで正確に価値のないものは何ですか。この非値がとどのように異なるかundefined。そして、javascriptが返す状況は何ですかnull

以下のサンプルを試してみました

var sam;
alert(sam);  // returns undefined

try {
    //var sam;
    alert(sam);  
} catch(ex) { }   // exception says: sam is undefined

そして、jsがいつnullを返すかはわかりません。誰かが私を明確にすることができますか?

4

4 に答える 4

14

アラート (サム); // 未定義を返す

いいえ、それは例外です。

undefined設定されていないプロパティにアクセスすると取得されます。未設定の名前を直接使用するとエラーが発生します。

windowグローバル変数は、単純な変数名を使用するか、グローバル オブジェクトのプロパティを使用してアクセスできるため、興味深いものです。

alert(window.sam);      // undefined
alert(window['sam']);   // undefined
alert('sam' in window); // false
alert(sam);             // ERROR

samが宣言されているが初期化されていない場合window.samでも、アクセスすると が取得されますundefinedが、別の理由で、 のwindowオブジェクトにエントリがありますが、存在しないプロパティにアクセスしたときに取得するものsamと同じオブジェクトを指しています。undefined

var sam;
alert(window.sam);      // undefined
alert(window['sam']);   // undefined
alert('sam' in window); // ** true
alert(sam);             // ** undefined

もちろん、これは紛らわしい血まみれの混乱です。undefinedJavaScript 言語の設計における最悪の間違いの 1 つです。

null一方、これは問題なく、他の言語の null/nil/void/None 値とほとんど同じように機能します。上記のどれにも当てはまりません。

于 2009-10-13T12:52:16.803 に答える
2
<script type="text/javascript">
// variable with an unasigned value
var a;
if (a == undefined) {
  alert('a is undefined');
}

if (a == null) {
  alert('a is undefined');
}

// this will produce an error
if (b == undefined) {
  alert('b is undefined');
}

// this is the right way to handle not defined variables
if (typeof(c) == 'undefined') {
  alert('c is blabla');
}
</script>
于 2009-10-13T12:54:21.107 に答える
2

変数が null 値を受け取るには、それを割り当てる必要があります。 null未知の値または気にしない値を示すために使用されます。 undefined一方、アクセスされているプロパティに値が割り当てられていないことを示すように設計されています。これは とは異なりnullます。

1 つは、「これnullがどのような値を持つべきかまだわからない」または「これが現在どのような値であるかは気にしない」と意図的に言っている場合です。OTH inundefinedは、「割り当てられていないこの値を使用する必要がありますか」と言っています。

于 2009-10-13T12:55:37.233 に答える
1

私がそれらを区別する方法は、「この値を定義していません」である undefined と、「この値を定義しているが、値がどうあるべきかがわからない、または把握できない」という null です。

于 2009-10-13T12:54:36.410 に答える