Dans JS, vous pouvez renvoyer un booléen ayant des propriétés personnalisées. Par exemple. Lorsque Modernizr teste le support vidéo, il renvoie true
ou false
le booléen renvoyé (Bool est le premier objet de classe dans JS) possède des propriétés spécifiant les formats pris en charge. Au début, cela m’a un peu surpris, puis j’ai commencé à aimer cette idée et à me demander pourquoi elle semble être utilisée avec parcimonie.
Cela ressemble à une manière élégante de traiter tous les scénarios dans lesquels vous voulez savoir en gros si quelque chose est vrai ou faux, mais vous pouvez être intéressé par des informations supplémentaires que vous pouvez définir sans définir d'objet de retour personnalisé ni utiliser une fonction de rappel prête à accepter plus de paramètres. Ainsi, vous conservez une signature de fonction très universelle sans compromettre la capacité de restitution de données plus complexes.
Il y a 3 arguments contre cela que je peux imaginer:
- C'est un peu inhabituel / inattendu quand il est probablement préférable que toute interface soit claire et non délicate.
- C’est peut-être un argument de paille, mais comme il s’agit d’un cas un peu tranchant, je peux imaginer qu’il se retourne discrètement dans certains optimiseurs JS, uglifier, ordinateurs virtuels ou après une modification mineure des spécifications du langage, etc.
- Il y a une meilleure façon - concise, claire et commune - de faire exactement la même chose.
Ma question est donc la suivante: existe-t-il de bonnes raisons d’éviter d’utiliser des booléens avec des propriétés supplémentaires? Sont-ils un tour ou un régal?
Avertissement de rebond de parcelle.
Ci-dessus se trouve la question initiale en pleine gloire. Comme Matthew Crumley et senevoldsen l'ont tous deux souligné, il est basé sur une fausse prémisse (falsie?). Conformément à la tradition JS, ce que Modernizr fait est un tour de langue malpropre. Cela revient à dire que JS a un booléen primitif qui, s'il est défini sur false, restera faux même après avoir essayé d'ajouter des accessoires (qui échoue en silence) et un objet booléen pouvant avoir des accessoires personnalisés, mais être un objet est toujours une vérité. Modernizr renvoie soit un objet booléen faux, soit un objet booléen de vérité.
Ma question initiale supposait que l'astuce fonctionnait différemment et que les réponses les plus courantes traitaient donc de l'aspect (parfaitement valide) des normes de codage. Cependant, je trouve que les réponses à cette question sont très utiles (ainsi que les arguments ultimes contre l’utilisation de la méthode), aussi j’en accepte un. Merci à tous les participants!
null
si ils ne sont pas pris en charge et, le cas échéant, un tableau de formats. Une liste est considérée comme une vérité dans JS et null
est une fausseté.