In JS puoi restituire un booleano con proprietà personalizzate. Per esempio. quando Modernizr testa il supporto video restituisce true
o false
ma il Booleano restituito (Bool è l'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 ad apprezzare l'idea e ho iniziato a chiedermi perché sembra essere usato con parsimonia?
Sembra un modo elegante per gestire tutti quegli scenari in cui fondamentalmente vuoi sapere se qualcosa è vero o falso, ma potresti essere interessato ad alcune informazioni aggiuntive che puoi definire senza definire un oggetto di reso personalizzato o usando un callback funzione pronta ad accettare più parametri. In questo modo si mantiene una firma di funzione molto universale senza compromettere la capacità di restituire dati più complessi.
Ci sono 3 argomenti contro di esso che posso immaginare:
- È un po 'insolito / inaspettato quando è probabilmente meglio che qualsiasi interfaccia sia chiara e non complicata.
- Questo potrebbe essere un argomento per uomo di paglia, ma con il suo essere un caso marginale posso immaginare che si ritorca silenziosamente in qualche ottimizzatore JS, ugificatore, VM o dopo una piccola modifica delle specifiche della lingua ecc.
- C'è un modo migliore - conciso, chiaro e comune - di fare esattamente lo stesso.
Quindi la mia domanda è: ci sono motivi validi per evitare l'uso di booleani con proprietà aggiuntive? Sono un trucco o una sorpresa?
Avviso di colpi di scena.
Sopra è la domanda originale in piena gloria. Come hanno sottolineato entrambi Matthew Crumley e senevoldsen, si basa su una premessa falsa (falsa?). Nella raffinata tradizione JS ciò che Modernizr fa è un trucco di linguaggio e uno sporco. Si riduce a JS con un bool primitivo che se impostato su false rimarrà falso anche dopo aver cercato di aggiungere oggetti (che fallisce silenziosamente) e un oggetto booleano che può avere oggetti di scena personalizzati ma essere un oggetto è sempre vero. Modernizr restituisce un valore booleano falso o un vero oggetto booleano.
La mia domanda originale presuppone che il trucco funzioni in modo diverso e quindi le risposte più popolari affrontano aspetti (perfettamente validi) degli standard di codifica. Comunque trovo che le risposte smascherano l'intero trucco più utile (e anche gli argomenti finali contro l'uso del metodo), quindi accetto uno di loro. Grazie a tutti i partecipanti!