JavaScriptで正確に未定義とはどういう意味ですか?なぜそこにあるのですか?どのような用途がありますか?どのように役立つのでしょうか?


11

JavaScriptには、undefinedと呼ばれるものがあります。基本クラスなのか、組み込み変数なのか、キーワードなのか、他の何かなのか本当にわからないからです。そこにあることを知っているだけです。

動作を確認するには、次のように書くだけです。

undefined;
typeof undefined;

この理由は誰も私に説明していただけます事は JavaScriptを挿入されていますか?nullこの言語には価値があるため、のようなものであってはなりませんnull。他の言語では、プロパティまたは変数の値がわからない場合、単にnullに設定します。ここでも同じことができます。

JavaScriptでこのことをどのように使用できますか?



これは、ここで吐き気について議論されましたstackoverflow.com/questions/6999291/…–
ポール

回答:


13

未定義について理解する必要があるものが2つあります...

  • タイプ undefinedだけ持つことができますつの値を
  • 変数 undefined

次の内容を注意深く読んでください...

  • タイプの値は非常に多くありますnumber(10、10.01、1e1)。ただし、タイプの1つだけundefinedで、その値は変数に格納されますundefinedその値は、例えば、数値は、 - NOリテラル表現を有し11001e-1型番のすべてのリテラルであるが、変数に格納された値がundefinedないリテラル形式を持っていません。

  • undefinedJavaScript undefinedは、グローバルスコープ内のtypeの値を宣言して割り当てる変数であり、単なる通常の変数です。したがって、次のすべてを実行できます...

  typeof undefined; //「未定義」

  未定義= 100;
  typeof undefined; //「数値」

  undefined = void 0;
  typeof undefined; //「未定義」

  window.undefined === undefined; // true
  window.undefined === void 0; // true
  
  • 変数を使用したくないundefined場合、式undefinedによってtypeの値を生成できますvoid 0-その唯一の目的はtypeの値を返すことですundefined

...誰もがこのことをJavaScriptに挿入した理由を私に説明できますか...

番号。宣言されていない変数がローカルではなくグローバルスコープになる理由を誰も説明できないように。存在の正当性を見つけるのではなく、スマートに使用するように訓練する必要があります。

...ヌル値があります...

null物事を行うことができますundefinedが、それは多かれ少なかれobjectsスカラーではなくに関連しています。実際、JavaScriptはnull自身をオブジェクトと見なし、typeof null「オブジェクト」を返します。

私の意見では、最終的な目的はundefinedand の絶対的な目的を推論しようとしないnullことであり、コードを読みやすく、保守しやすく、再利用できるようにコードでわかりやすく使用することです。


2
良い説明@greengit。the bottom line is to NOT try to reason the absolute purposes of undefined and null、JavaScriptは論理的な言語とはほど遠いようで、新しい世界を実験するなど、慣れる必要があります。
サイードネアマティ

1
「その唯一の目的は、型の値を返すことですundefined」。実際にvoid式を評価し、戻り値を無視して値を返しundefinedます。違いについては。undefinedこのことには価値がないと言うためにJSエンジンによって使用されます。このことは価値がないと言うnullためにあなたによって使用されます。明確な区別があります。
レイノス

1
undefined = 100; typeof undefined;nullに割り当てようとすると、エラーが発生します。将来の読者のためにそれを明確にしたかっただけです。
ジョシュランブト

6

申し訳ありませんがために、古い質問に答えるが、あなたは未定義とヌルの両方を必要とする理由は単純です:あなたは絶対にプロトタイプベースのダックタイピング言語でなければなりません。このオブジェクトは、Xがあると言う」「このオブジェクトは、Xの値を定義していません」と区別なし/ヌル/空」。

この機能がないと、プロトタイプチェーンを歩く方法がないため、継承が機能しません。obj.somePropが未定義であると判断できるようにして、obj.prototype.somePropを調べ、値が見つかるまでチェーンを先に進めていく必要があります。obj.somePropがnullを返した場合、それが本当にnullであるか、単に「プロトタイプを見る」だけなのかを知る方法はありません。これを回避する唯一の他の方法は、舞台裏で陰鬱な魔法を注入することです。これにより、プロトタイプチェーンでファジングし、JSブラックマジックのさまざまなビットを実行する能力が損なわれます。

Javascriptの多くと同様に、未定義でnullのアイデアは最初は不安定で馬鹿げているように見えますが、その後は絶対に素晴らしいものになります(その後、奇妙で愚かなことに戻りますが、合理的な説明があります)。

C#のような言語は、存在しないプロパティにアクセスするとコンパイルされません。他の動的言語は、存在しないプロパティに触れると実行時に例外をスローすることがよくあります。つまり、特別な構成を使用してテストする必要があります。Plusクラスは、オブジェクトがインスタンス化されると、その継承チェーンとそのすべてのプロパティを既に知っていることを意味します-JSでは、チェーンを15ステップ上げるとプロトタイプを変更でき、それらの変更は既存のオブジェクトに反映されます。


3

undefined未定義の値に設定されるグローバル変数があります。邪悪な人々はそれを他のものに設定するかもしれないので、おそらくそれを信用しないことが最善です。

  • 未定義の値は、値を返さない関数の戻り値です。
  • 未定義の値は、割り当てられていない変数の値です。
  • 未定義の値は、渡されていないパラメーターの値です。
  • 未定義の値は、割り当てられていないプロパティの値です。
  • 「未定義」は、宣言されていない変数のタイプです。(typeof undeclaredVariable == 'undefined'。不足している変数の値を読み取ろうとすると、スローされReferenceErrorます。)

nullが微妙に壊れていtypeof null == 'object'ます。私たちがなぜ持っているのか分かりません、undefinedそしてnullおそらく歴史的な事故です。


2

まあ、undefinedされて何か評価したセンチネル値で定義されていないとは対照的に、null正確に表現しないように定義された値であり、何も

var o = { };
> undefined
o
> Object {}
o.foo
> undefined
function f() {}
> undefined
function r() { return null; }
> undefined
f()
> undefined
r()
> null

したがって、たとえば、戻り値を定義しない関数の戻り値は未定義です。オブジェクトで定義されていないプロパティの値は未定義です。式ではないステートメントの戻り値は未定義です(ただし、これはコンソール以外では発生しません)。
あなたがいることをしてください、ノート、できる明示的に戻っていることを、関数を作成undefinedし、あなたがすることができ、明示的に値を持つプロパティを定義しundefined、最後にそれが有効な値であるため、オブジェクト上。明示的に通信するには、何かが定義されていないことを確認します。

あなたは、の関係を考えることができundefinednullの間とNaNして0


「戻り値を定義していない関数の戻り値は未定義です」ということundefinedですvoidか?
サイードネアマティ

@Saeed:まったくそうではありません。voidJavaScriptの単項演算子は、任意の引数を取り を返しますundefined
back2dos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.