2017-12-06 3 views
1

封印されたオブジェクトのプロパティが条件でチェックされない理由は何ですか?例えばフロー封印されたオブジェクトタイプのプロパティが条件式でチェックされない理由

// Create a sealed object type 
const o = { 
    Foo: 'Foo', 
}; 

// Access a non-existent property 
// Reports an Error 
const fooz = o.Fooz; 

// Conditional with non-existent property 
// Does not report an error 
if (o.Fooz === undefined) {} 

だけ明確にする - これは私がFlow issueとして、この質問を投稿Flow sealed object

+1

これはシールされていないオブジェクトです。 –

+0

ありがとう@JaredSmith、私は明確にすべきです - これはFlowの観点から密閉されたオブジェクトだと信じています。ドキュメント(https://flow.org/en/docs/types/objects/#toc-sealed-objects)を見ると、「プロパティでオブジェクトを作成すると、フローに密封されたオブジェクトタイプが作成されます」と表示されます。 –

+1

JavaScriptで既に別の意味を持っているので、彼らはその言葉を選んだのは残念です。あなたの質問については、私はフロー文書でこれについて何も見つけることができません。可能性が高い:高度に動的な言語を静的に分析することは難しく、コンパイラーはこのケースを妥当な時間内に解決できないか、既存のコードのパターンの人気を譲歩している。 –

答えて

0

です。

条件式内に不在ではありません。 the sourceの コメントを参照してください。

ソースのコメントが読み取ります

条件式は、その プロパティアクセスは暫定的な性質 が存在しない場合でも、許可されている以外、表現のようにチェックされます。これは、そのプロパティを使用する前にプロパティの存在についてのテスト の共通のJavaScriptイディオムに対応します。

関連する問題