Null vs.Undefined
主題に関する無料のyoutubeビデオ
JavaScript(および拡張子TypeScript)には、nullundefined。 それらは異なるものを意味することを意図しています:
- 
何かが初期化されていません:
undefined。 - 
何かが現在利用できません:
null。 
事実は、あなたが両方に対処する必要がありますです。 興味深いことに、==のJavaScriptでは、nullundefinedは互いに等しいだけです。
// 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
推奨== nullundefinednull== undefined== nullundefined次の値について説明します。
ルートレベルのチェックundefined
私はあなたが== nullを使うべきだと言ったことを覚えていますか? もちろん、あなたは(私はちょうどそれを言った原因^)。 ルートレベルのものには使用しないでください。 Strictモードでは、foofooReferenceError例外が発生し、コールスタック全体がアンワインドされます。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 */ }errnullエラーだ 独自の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標準はエンコードをサポートしています
nullundefinednullであるオブジェクトをJSONエンコードすると、属性はnull値で含まれますが、undefined値を持つ属性は完全に除外されます。その結果、JSONベースのデータベースはnullundefinednullnullに設定することで、属性をクリアするインテントを送信することができます。属性値をundefinedに設定すると、属性名はエンコードされないため、ストレージと転送コストを節約できます。 しかし、これは、値のクリアと不在の値の意味を複雑にする可能性があります。TypeScriptチームは
null:TypeScriptコーディングガイドラインを使用しておらず、問題は発生していません。 Douglas Crockfordは、nullundefinedを使用する必要があると考えています。ただし、NodeJSスタイルコードベースでは、エラー引数にnullSomething is currently unavailable== null両方を除外するので、2つを区別することは気にし