En JS puede devolver un booleano que tenga propiedades personalizadas. P.ej. cuando Modernizr prueba el soporte de video, regresa true
o false
el Boolean devuelto (Bool es un objeto de primera clase en JS) tiene propiedades que especifican qué formatos son compatibles. Al principio me sorprendió un poco, pero luego me empezó a gustar la idea y me pregunté por qué parece ser utilizada con moderación.
Parece una forma elegante de lidiar con todos esos escenarios en los que básicamente desea saber si algo es verdadero o falso, pero puede estar interesado en alguna información adicional que pueda definir sin definir un objeto de devolución personalizado o usar una función de devolución de llamada preparada para aceptar más parámetros De esta manera, conserva una firma de función muy universal sin comprometer la capacidad para devolver datos más complejos.
Hay 3 argumentos en contra que puedo imaginar:
- Es un poco raro / inesperado cuando probablemente sea mejor para cualquier interfaz ser clara y no complicada.
- Esto puede ser un argumento de hombre de paja, pero al ser un caso marginal, me imagino que fracasa en algún optimizador JS, uglifier, VM o después de un pequeño cambio en la especificación del lenguaje de limpieza, etc.
- Hay una forma mejor, concisa, clara y común, de hacer exactamente lo mismo.
Entonces, mi pregunta es ¿hay alguna razón fuerte para evitar el uso de booleanos con propiedades adicionales? ¿Son un truco o un regalo?
La trama tuerce la advertencia.
Arriba está la pregunta original en toda su gloria. Como Matthew Crumley y senevoldsen señalaron, se basa en una premisa falsa (¿falsa?). En la tradición de JS, lo que Modernizr hace es un truco de lenguaje y uno sucio. Se reduce a JS que tiene un bool primitivo que, si se establece en falso, seguirá siendo falso incluso después de INTENTAR agregar accesorios (que falla en silencio) y un objeto booleano que puede tener accesorios personalizados pero ser un objeto siempre es verdadero. Modernizr devuelve un objeto booleano falso o un objeto booleano verdadero.
Mi pregunta original asumía que el truco funciona de manera diferente y, por lo tanto, las respuestas más populares tratan con el aspecto de los estándares de codificación (perfectamente válidos). Sin embargo, encuentro que las respuestas que desacreditan todo el truco son más útiles (y también los argumentos finales contra el uso del método), así que estoy aceptando una de ellas. ¡Gracias a todos los participantes!
null
si no son compatibles y una matriz de formatos si es así. Una lista se considera verdadera en JS, y null
es falsa.