W JS możesz zwrócić wartość logiczną o niestandardowych właściwościach. Na przykład. gdy Modernizr testuje obsługę wideo, zwraca true
lub false
ale zwrócony Boolean (Bool jest obiektem pierwszej klasy w JS) ma właściwości określające obsługiwane formaty. Z początku trochę mnie to zaskoczyło, ale potem spodobał mi się ten pomysł i zacząłem się zastanawiać, dlaczego wydaje się być stosowany raczej oszczędnie?
Wygląda to na elegancki sposób radzenia sobie ze wszystkimi scenariuszami, w których zasadniczo chcesz wiedzieć, czy coś jest prawdą czy fałszem, ale możesz być zainteresowany dodatkowymi informacjami, które możesz zdefiniować bez definiowania niestandardowego obiektu zwrotnego lub korzystania z funkcji wywołania zwrotnego przygotowanej do zaakceptuj więcej parametrów. W ten sposób zachowujesz bardzo uniwersalną sygnaturę funkcji bez uszczerbku dla możliwości zwracania bardziej złożonych danych.
Są 3 argumenty przeciwko temu, które mogę sobie wyobrazić:
- Jest to nieco rzadkie / nieoczekiwane, gdy prawdopodobnie lepiej jest, aby jakikolwiek interfejs był przejrzysty i nietrudny.
- Może to być argument o słomce, ale ponieważ jest to trochę skrajny przypadek, mogę sobie wyobrazić, że cicho odpiera niektóre optymalizatory JS, uglifier, VM lub po drobnej zmianie specyfikacji języka czyszczenia itp.
- Jest lepszy - zwięzły, jasny i powszechny - sposób robienia dokładnie tego samego.
Więc moje pytanie: czy są jakieś ważne powody, aby unikać używania booleanów z dodatkowymi właściwościami? Czy to podstęp, czy uczta?
Ostrzeżenie o zwrotach akcji.
Powyżej jest oryginalne pytanie w pełnej krasie. Jak zauważyli Matthew Crumley i senevoldsen, opiera się ono na fałszywej (falsy?) Przesłance. Zgodnie z tradycją JS Modernizr to sztuczka językowa i brudna. Sprowadza się to do tego, że JS ma prymitywną wartość bool, która jeśli ustawiona na false, pozostanie fałszywa nawet po próbie dodania rekwizytów (która kończy się niepowodzeniem) i obiekt logiczny, który może mieć niestandardowe rekwizyty, ale bycie obiektem jest zawsze zgodne z prawdą. Modernizr zwraca wartość logiczną false lub true Boolean.
Moje oryginalne pytanie zakładało, że sztuczka działa inaczej, więc najpopularniejsze odpowiedzi dotyczą (doskonale poprawnych) aspektów standardów kodowania. Jednak uważam, że odpowiedzi obalające całą sztuczkę są najbardziej pomocne (a także ostateczne argumenty przeciwko użyciu tej metody), więc akceptuję jedną z nich. Dziękujemy wszystkim uczestnikom!
null
jeśli nie są obsługiwane, i tablicę formatów, jeśli tak. Lista jest uważana za prawdziwą w JS i null
jest fałszem.