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 check
console.log(0 == undefined); // false
console.log('' == undefined); // false
console.log(false == undefined); // false

推奨== nullundefinednull== undefined== nullundefined次の値について説明します。

ルートレベルのチェックundefined

私はあなたが== nullを使うべきだと言ったことを覚えていますか? もちろん、あなたは(私はちょうどそれを言った原因^)。 ルートレベルのものには使用しないでください。 Strictモードでは、foofooReferenceError例外が発生し、コールスタック全体がアンワインドされます。p>

厳密モードを使用する必要があります。.. そして、実際には、モジュールを使用する場合、TSコンパイラはそれを挿入します。.. 変数がグローバルレベルで定義されているかどうかを確認するには、通常typeof:

if (typeof someglobal !== 'undefined') {
// someglobal is now safe to use
console.log(someglobal);
}

undefinedの明示的な使用を制限します

未定義の明示的な使用を制限します

未定義の明示的な使用を制限します

未定義の明示的な使用を制限します

未定義の明示的な使用を制限します

typescriptは、次のようなものではなく、値とは別に構造を文書化する機会を与えるためです。

function foo(){
// if Something
return {a:1,b:2};
// else
return {a:1,b:undefined};
}

型注釈を使用する必要があります:

function foo():{a:number,b?:number}{
// if Something
return {a:1,b:2};
// else
return {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つを区別することは気にし



コメントを残す

メールアドレスが公開されることはありません。