2015-07-01 9 views
8

Dla mojego zrozumienia jednokierunkowy operator ! wykonuje niejawne konwersje typów i czasami jest używany do konwersji typów.Biorąc pod uwagę najlepsze praktyki, możemy użyć podwójnego operatora jednoargumentowego! w JavaScript?

Tak więc operator ! konwertuje swój operand na boolowski i neguje go.

Teraz:

!!x // Same as Boolean(x) 

W rzeczywistości:

!!'true' === Boolean('true') // true 

Więc jestem zakładając zarówno !!x i Boolean(x) wykonać tę samą czynność.

chciałbym wiedzieć:

  • Znasz zastrzeżenia, że ​​mój założenia źle?
  • Która metoda powinna być preferowana w kontekście dobrych praktyk?
  • Czy znasz jakieś różnice, które należy znać wśród różnych wersji ECMAScript lub dostawców przeglądarek?
+1

Dlaczego ciągle określasz to jako unarne? Czy jest plik binarny! operator? – BoltClock

+1

@BoltClock dzięki za komentarz, dla mojego zrozumienia! jest operatorem jednokierunkowym. Znalazłem to odniesienie w JavaScript: The Definitive Guide, 6th Edition. – GibboK

+4

IMO to nie ma znaczenia. W tym przypadku są takie same. Wolałbym podwójnie negować operator '!!', ponieważ jest mniej pisania. Po prostu bang bang i gotowe. Ale niektórzy twierdzą, że funkcja 'Boolean()' jest bardziej czytelna dla człowieka. – Ogalb

Odpowiedz

4
  • Twoje założenia są prawidłowe. Dokładnie to działa i nie jestem świadomy żadnej szczególnej uwagi, którą należy podjąć podczas korzystania z tego.

  • Mówiąc o dobrej praktyki, prawdopodobnie będziesz mieć jak najwięcej ludzi wspierających szybkiego „n«brudną»!! sposób jak istnieją kto by zwolennikiem używania funkcji Boolean; jednak z mojego doświadczenia wynika, że ​​ !! jest o wiele bardziej powszechne w kodzie biblioteki (patrz źródło jQuery, masz wiele rzeczy takich jak return !!locked;). IMHO, jest wystarczająco rozpoznawalny, aby można go było używać bez pogarszania czytelności kodu.

  • To wszystko było standardem przez bardzo długi czas w ECMAScript; Nie mogę mówić o starszych wersjach Internet Explorera (przed IE 8), ale można ufać, że wszystkie nowoczesne przeglądarki zachowują się tak samo w tym przypadku.

Przydatne odnośniki w standardzie:

1

Znasz zastrzeżenia, że ​​mój założenia źle?

Twoje założenie jest prawidłowe. Zarówno funkcja Boolean, jak i !! mają taką samą funkcjonalność.

Która metoda powinna być preferowana pod kątem dobrych praktyk?

polecam korzystania operator jednoargumentowy dwa razy, ponieważ jest co najmniej dwa razy szybciej niż przy użyciu logiczną z 100000 iteracji

JS Link skrzypce: https://jsfiddle.net/vj593auw/1/

Znasz różnice mieć świadomość wśród inna Wersje ECMAScript lub dostawcy przeglądarek?

Operatory logiczne i jednoargumentowe są implementowane z JavaScript 1.0, więc powinny być dostępne we wszystkich przeglądarkach obsługujących JavaScript.

+0

Dzięki za komentarze. Czy mógłbyś poprawić swoją odpowiedź? Nawet jeśli jestem spokrewniony, nie jestem pewien, czy odpowiada on konkretnie na moje pytanie. – GibboK

+0

Nie jestem również pewien, czy twój punkt dotyczący "Boolean uzna, że ​​jego parametr jako wyrażenie nie jako wartość" jest istotny jako: "Boolean() po prostu konwertuje swój argument na prymitywną wartość logiczną i zwraca tę wartość." jak wspomniano w JavaScript: The Definitive Guide, 6th Edition. Dla mojego zrozumienia i wyrażenia jest obliczana wartość w celu przetworzenia przez Boolean() ex: Boolean ((function() {return 'false';})()); – GibboK

+0

Proszę również rozważyć przeczytanie specyfikacji ECMA-262 na 19.3.1.1. gdzie tylko wartość jest wymieniona jako argument Boolean ... Boolean (wartość) – GibboK

Powiązane problemy