Null vs.Undefined
主題に関する無料のyoutubeビデオ
JavaScript(および拡張子TypeScript)には、null
undefined
。 それらは異なるものを意味することを意図しています:
-
何かが初期化されていません:
undefined
。 -
何かが現在利用できません:
null
。
事実は、あなたが両方に対処する必要がありますです。 興味深いことに、==
のJavaScriptでは、null
undefined
は互いに等しいだけです。
// Both null and undefined are only `==` to themselves and each other:console.log(null == null); // true (of course)console.log(undefined == undefined); // true (of course)console.log(null == undefined); // true// You don't have to worry about falsy values making through this checkconsole.log(0 == undefined); // falseconsole.log('' == undefined); // falseconsole.log(false == undefined); // false
推奨== null
undefined
null
== undefined
== null
undefined
次の値について説明します。
ルートレベルのチェックundefined
私はあなたが== null
を使うべきだと言ったことを覚えていますか? もちろん、あなたは(私はちょうどそれを言った原因^)。 ルートレベルのものには使用しないでください。 Strictモードでは、foo
foo
ReferenceError
例外が発生し、コールスタック全体がアンワインドされます。p>
厳密モードを使用する必要があります。.. そして、実際には、モジュールを使用する場合、TSコンパイラはそれを挿入します。.. 変数がグローバルレベルで定義されているかどうかを確認するには、通常
typeof
:if (typeof someglobal !== 'undefined') {// someglobal is now safe to useconsole.log(someglobal);}undefinedの明示的な使用を制限します
未定義の明示的な使用を制限します
未定義の明示的な使用を制限します
未定義の明示的な使用を制限します
未定義の明示的な使用を制限します
typescriptは、次のようなものではなく、値とは別に構造を文書化する機会を与えるためです。
function foo(){// if Somethingreturn {a:1,b:2};// elsereturn {a:1,b:undefined};}型注釈を使用する必要があります:
function foo():{a:number,b?:number}{// if Somethingreturn {a:1,b:2};// elsereturn {a:1};}ノードスタイルのコールバック
ノードスタイルのコールバック関数(例えば
(err,somethingElse)=>{ /* something */ }
err
null
エラーだ 独自のApiを作成するときは、一貫性のためにこの場合はnull
を使用してもかまいません。fs.readFile('someFile', 'utf8', (err,data) => {if (err) {// do something} else {// no error}});その場合、実際にはエラー値が存在しないことを気にする必要はありません(
.then
.catch
で処理します)。たとえば、次のようなひどい関数です。function toInt(str: string) {return str ? parseInt(str) : undefined;}は、このようにはるかによく書くことができます。
function toInt(str: string) {return str ? parseInt(str) : undefined;}function toInt(str: string) {return str ? parseInt(str) : undefined;}:
function toInt(str: string): { valid: boolean, int?: number } {const int = parseInt(str);if (isNaN(int)) {return { valid: false };}else {return { valid: true, int };}}JSONとシリアル化
JSON標準はエンコードをサポートしています
null
undefined
null
であるオブジェクトをJSONエンコードすると、属性はnull値で含まれますが、undefined
値を持つ属性は完全に除外されます。その結果、JSONベースのデータベースはnull
undefined
null
null
に設定することで、属性をクリアするインテントを送信することができます。属性値をundefinedに設定すると、属性名はエンコードされないため、ストレージと転送コストを節約できます。 しかし、これは、値のクリアと不在の値の意味を複雑にする可能性があります。TypeScriptチームは
null
:TypeScriptコーディングガイドラインを使用しておらず、問題は発生していません。 Douglas Crockfordは、null
undefined
を使用する必要があると考えています。ただし、NodeJSスタイルコードベースでは、エラー引数にnull
Something is currently unavailable
== null
両方を除外するので、2つを区別することは気にし