JavaScriptにはndefinedと呼ばれるものがあります。基本クラスなのか、組み込み変数なのか、キーワードなのか、他に何なのかわからないので、私は何か言いました。私はそれがそこにあることを知っています。
実際の動作を確認するには、次のように書くだけです。
undefined;
typeof undefined;
thingがJavaScriptに挿入された理由を誰かに説明してもらえますか?この言語にはnull
の値があるため、null
のような値にすることはできません。他の言語では、プロパティや変数の値がわからない場合は、単にnullに設定します。ここでも同じことができます。
JavaScriptでこれをどのように使用できるか?
未定義について理解する必要のあることが2つあります...
undefined
のみを持つことができます1つの値。undefined
以下を注意深く読んでください...
タイプnumber
には非常に多くの値があります(10、10.01、1e1)。ただし、タイプundefined
の-1つの値とその値は変数undefined
に格納されます。 その値にはリテラル表現がありません-たとえば、数値1
、100
、 1e-1
はすべて数値型のリテラルですが、変数undefined
に格納されている値はリテラル形式ではありません。
undefined
は、JavaScriptがグローバルスコープでundefined
型の値を宣言して割り当てる変数であり、通常の変数です。したがって、次のすべてを行うことができます...
typeof undefined; // "undefined" undefined = 100; typeof undefined; // "number" undefined = void 0; typeof undefined; // "undefined" window.undefined === undefined; // true window.undefined === void 0; // true
undefined
を使用したくない場合は、式void 0
によって型undefined
の値を生成できます。その唯一の目的は、型の値を返すことです。 undefined
。...これがJavaScriptに挿入された理由を誰かに説明してもらえますか...
番号。宣言されていない変数がローカルではなくグローバルスコープに入る理由を誰も説明できないように。あなたはそれが存在することの正当性を見つけようとする代わりに、それをsmartly使用するように訓練する必要があります。
... null値があります...
null
はundefined
が行うことを実行できますが、スカラーではなくobjects
に関連しています。実際、JavaScriptはnull
自体をオブジェクトと見なします-typeof null
は「オブジェクト」を返します。
私の意見では、一番下の行はundefined
とnull
の絶対的な目的を推論しようとせず、コードでそれらをわかりやすく使用して、コードを読み取り、保守、再利用できるようにすることです。
古い質問に答えて申し訳ありませんが、未定義とnullの両方が必要な理由は簡単です。プロトタイプベースのダックタイピング言語では、 しなければならない 「このオブジェクトはXの値を定義しない」と「このオブジェクトはXが何もない/ null /空である」と区別します。
この機能がないと、プロトタイプチェーンをたどる方法がないため、継承は機能しません。 obj.somePropが未定義であることを確認できるようにする必要があります。これにより、obj.prototype.somePropを確認し、値が見つかるまでチェーンを上に向かって進むことができます。 obj.somePropがnullを返した場合、それが本当にnullであったのか、それとも単に「プロトタイプを見る」ことを意味していたのかを知る方法はありません。これを回避する唯一の他の方法は、プロトタイプチェーンでファズしたり、JSブラックマジックの他のさまざまなビットを実行したりする能力を壊す、舞台裏にいくつかの不器用な魔法を注入することです。
多くのJavascriptと同様に、undefinedとnullの考え方は、最初は不安定で愚かであり、その後絶対に見事です(それから、不安定で愚かですが、合理的な説明があります)。
存在しないプロパティにアクセスすると、C#などの言語はコンパイルされません。他の動的言語は、存在しないプロパティに触れると、実行時に例外をスローすることがよくあります。つまり、特別な構成を使用してそれらをテストする必要があります。プラスクラスとは、オブジェクトがインスタンス化されたときに、その継承チェーンとそのすべてのプロパティがわかっていることを意味します。JSでは、プロトタイプを15ステップ上に変更すると、それらの変更が既存のオブジェクトに反映されます。
未定義の値に設定されているグローバル変数undefined
があります。邪悪な人々はそれを別のものに設定するかもしれないので、それを信頼しないことがおそらく最善です。
typeof undeclaredVariable == 'undefined'
。不完全な変数の値を読み取ろうとすると、ReferenceError
がスローされます。)null
はtypeof null == 'object'
のため、微妙に壊れています。なぜundefined
とnull
があるのかわかりません。おそらく歴史的な事故でしょう。
まあ、undefined
は、-nothingを表すために正確に定義された値であるnull
とは対照的に、-未定義であるものを評価することによって得られるセンチネル値です。
var o = { };
> undefined
o
> Object {}
o.foo
> undefined
function f() {}
> undefined
function r() { return null; }
> undefined
f()
> undefined
r()
> null
したがって、たとえば、戻り値を定義しない関数の戻り値は未定義です。オブジェクトで定義されていないプロパティの値は未定義です。式ではないステートメントの戻り値は未定義です(ただし、これはコンソール以外では発生しません)。
canは明示的にundefined
を返す関数を作成し、canはオブジェクトにundefined
の値を持つプロパティを明示的に定義することに注意してください。最終的には有効な値です。あなたが明示的に通信するためにそうすることは、何かが未定義であることです。
undefined
とnull
の関係は、NaN
と0
の関係と考えることができます。