In JS können Sie einen Booleschen Wert mit benutzerdefinierten Eigenschaften zurückgeben. Z.B. Wenn Modernizr die Videounterstützung testet, gibt es zurück, true
oder false
aber der zurückgegebene Boolesche Wert (Bool ist ein erstklassiges Objekt in JS) verfügt über Eigenschaften, die angeben, welche Formate unterstützt werden. Zuerst überraschte es mich ein bisschen, aber dann fing ich an, die Idee zu mögen und mich zu fragen, warum sie eher sparsam verwendet zu werden scheint.
Es sieht aus wie eine elegante Art und Weise, mit all den Szenarien umzugehen, in denen Sie im Grunde wissen möchten, ob etwas wahr oder falsch ist, aber möglicherweise an zusätzlichen Informationen interessiert sind, die Sie definieren können, ohne ein benutzerdefiniertes Rückgabeobjekt zu definieren oder eine Rückruffunktion zu verwenden, für die Sie vorbereitet sind Akzeptieren Sie weitere Parameter. Auf diese Weise behalten Sie eine sehr universelle Funktionssignatur bei, ohne die Fähigkeit zur Rückgabe komplexerer Daten zu beeinträchtigen.
Es gibt drei Argumente dagegen, die ich mir vorstellen kann:
- Es ist etwas ungewöhnlich / unerwartet, wenn es wahrscheinlich besser ist, wenn eine Schnittstelle klar und nicht schwierig ist.
- Dies mag ein Strohmann-Argument sein, aber da es sich um einen Randfall handelt, kann ich mir vorstellen, dass es in einigen JS-Optimierern, Uglifizierern, VMs oder nach einer geringfügigen Änderung der Aufräum-Sprachspezifikationen usw. leise nach hinten losgeht.
- Es gibt eine präzisere, klarere und allgemeinere Methode, genau dasselbe zu tun.
Meine Frage ist also, ob es starke Gründe gibt, die Verwendung von Booleschen Werten mit zusätzlichen Eigenschaften zu vermeiden. Sind sie ein Trick oder ein Leckerbissen?
Plot Twists Warnung.
Oben ist die ursprüngliche Frage in voller Pracht. Wie Matthew Crumley und Senevoldsen beide betonten, basiert es auf einer falschen (falschen?) Prämisse. In feiner JS-Tradition ist Modernizr ein Sprachtrick und ein schmutziger. Es läuft darauf hinaus, dass JS einen primitiven Bool hat, der, wenn er auf false gesetzt ist, auch nach dem VERSUCH, Requisiten hinzuzufügen (was unbemerkt fehlschlägt), und ein boolesches Objekt, das benutzerdefinierte Requisiten haben kann, aber ein Objekt ist, immer wahr. Modernizr gibt entweder Boolean false oder ein wahrheitsgemäßes Boolean-Objekt zurück.
Meine ursprüngliche Frage ging davon aus, dass der Trick anders funktioniert, und daher beschäftigen sich die beliebtesten Antworten mit dem Aspekt der (perfekt gültigen) Codierungsstandards. Allerdings finde ich die Antworten, die den ganzen Trick entlarven, am hilfreichsten (und auch die ultimativen Argumente gegen die Verwendung der Methode), sodass ich eine davon akzeptiere. Vielen Dank an alle Teilnehmer!
null
wenn sie nicht unterstützt werden, und in diesem Fall eine Reihe von Formaten. Eine Liste wird in JS als wahr angesehen und null
ist falsch.