In JS puoi restituire un valore booleano con proprietà personalizzate. Per esempio. quando Modernizr verifica il supporto video, ritorna true
o false
ma il valore booleano restituito (Bool è un oggetto di prima classe in JS) ha proprietà che specificano quali formati sono supportati. All'inizio mi ha sorpreso un po ', ma poi ho iniziato a piacermi l'idea e ho iniziato a chiedermi perché sembra essere usato con parsimonia?
Sembra un modo elegante di gestire tutti quegli scenari in cui sostanzialmente vuoi sapere se qualcosa è vero o falso ma potresti essere interessato ad alcune informazioni aggiuntive che puoi definire senza definire un oggetto di ritorno personalizzato o utilizzando una funzione di callback preparata per accetta più parametri. In questo modo si conserva una firma di funzione molto universale senza compromettere la capacità di restituzione di dati più complessi.
Ci sono 3 argomenti contrari che posso immaginare:
- È un po 'insolito / inaspettato quando probabilmente è meglio che qualsiasi interfaccia sia chiara e non complicata.
- Questo potrebbe essere un argomento da uomo di paglia, ma essendo un po 'un caso limite, posso immaginarlo tranquillamente ritorcersi contro alcuni ottimizzatori, ugelli, VM JS o dopo una piccola modifica delle specifiche del linguaggio di pulizia ecc.
- Esiste un modo migliore, conciso, chiaro e comune di fare esattamente lo stesso.
Quindi la mia domanda è: ci sono delle valide ragioni per evitare di usare i booleani con proprietà aggiuntive? Sono uno scherzetto o dolcetto?
Trama avviso colpi di scena.
Sopra è la domanda originale in piena gloria. Come hanno sottolineato Matthew Crumley e Senevoldsen, si basa su una premessa falsa (falsa?). Nella raffinata tradizione di JS, ciò che Modernizr fa è un trucco linguistico e uno sporco. Si riduce a JS che ha un bool primitivo che se impostato su falso rimarrà falso anche dopo aver provato ad aggiungere oggetti di scena (che fallisce silenziosamente) e un oggetto booleano che può avere oggetti di scena personalizzati ma essere un oggetto è sempre vero. Modernizr restituisce un booleano falso o un vero oggetto booleano.
La mia domanda originale presupponeva che il trucco funzionasse diversamente e quindi le risposte più popolari riguardano l'aspetto degli standard di codifica (perfettamente validi). Comunque trovo le risposte debunking tutto il trucco più utili (e anche gli argomenti finali contro l'utilizzo del metodo), quindi ne accetto uno. Grazie a tutti i partecipanti!
null
se non supportati e una serie di formati in tal caso. Una lista è considerata vera in JS ed null
è falsa.