JSでは、カスタムプロパティを持つブール値を返すことができます。例えば。Modernizrは、ビデオサポートのためにテストするときに返すtrue
かfalse
が、返されたブール(ブール値は、JSでのファーストクラスのオブジェクトである)の形式がサポートされているものを指定するプロパティがあります。最初は少し驚きましたが、そのアイデアが好きになり始め、なぜそれが控えめに使用されているのか疑問に思い始めましたか?
基本的に何かが真であるか偽であるかを知りたいすべてのシナリオを扱うエレガントな方法のように見えますが、カスタム戻りオブジェクトを定義することなく、または準備されたコールバック関数を使用せずに定義できる追加情報に興味があるかもしれませんより多くのパラメーターを受け入れます。この方法により、より複雑なデータを返す能力を損なうことなく、非常に普遍的な関数シグネチャを保持できます。
私が想像できる3つの議論があります:
- インターフェイスが明確でトリッキーではない方がおそらく良い場合、それは少し珍しい/予期しないことです。
- これはストローマンの議論かもしれませんが、それは少しエッジケースであるため、JSオプティマイザー、uい、VMで静かに裏目に出るか、または言語仕様のマイナーな変更などで静かに裏目に出ることを想像できます。
- より正確な、簡潔で、明確で一般的な-まったく同じ方法があります。
だから私の質問は、追加のプロパティでブール値を使用することを避ける強力な理由はありますか?彼らはトリックまたは御treat走ですか?
ねじれ警告をプロットします。
上記は元気な質問です。Matthew Crumleyとsenevoldsenの両方が指摘したように、それは誤った(偽の?)前提に基づいています。優れたJSの伝統では、Modernizrが行うことは言語のトリックであり、汚いものです。要するに、falseに設定された場合、プロップ(サイレントに失敗する)を追加しようとしてもfalseに設定されるプリミティブboolを持つJSと、カスタムプロップを持つことができるが、オブジェクトであるブールオブジェクトは常に真実です。Modernizrは、ブール値falseまたは真実のブール値オブジェクトを返します。
私の元々の質問は、トリックの動作が異なると想定していたため、最も一般的な回答は、コーディング標準の側面(完全に有効)を扱っています。しかし、私はトリック全体を暴く答えが最も役立つと思います(そして、メソッドを使用することに対する究極の引数も)ので、私はそれらの1つを受け入れています。すべての参加者に感謝します!
null
サポートされていない場合は単に返され、サポートされている場合はフォーマットの配列が返されることに注意してください。リストはJSでは真実と見なされ、null
偽りです。