Blog webdeveloperski Patryk yarpo Jar

Dlaczego new Boolean jest złym pomysłem

Autor wiadomości Luty 23, 2011

Javascript to język w pełni obiektowy. Obiektem jest wszystko: funkcja - obiekt, obiekt - obiekt, zmienna - obiekt... Eh, no i ta pełność ma swoje "widzimisie" i problemy.

Wartości logiczne

W klasycznej logice są dwie: true i false (prawda i fałsz). W JS istnieje jednak konstruktor dla wartości logicznych:

var oBool = new Boolean(false);

Ktoś powie - "fajnie, mamy obiektowość, nawet w najbanalniejszych rzeczach". Zaraz potem, zapomni się i zrobi taki kod:

var oBool = new Boolean(false);
if (oBool)
{
    alert("Nam nikt nie powie, że fałsz to prawda...\nUppps, JS jednak to zrobiła");
}

Dlaczego pojawia się alert?! Otóż, ma to związek z porównywaniem wartości w JS. Obiekt `oBool' jest rzutowany w tej instrukcji warunkowej do wartości logicznej prostej. Jako, że pod zmienną `oBool' przypisany jest obiekt, to rzutowanie do wartośći logicznej daje `true'. Stąd zamieszanie.

Rozwiązanie I

Można używać odpowiednio operatorów porównań. Przeczytaj: www.yarpo.pl/2011/01/19/operatory-porownan-w-js

var oBool = new Boolean(false);
if (true === oBool)
{
    alert("Nam nikt nie powie, że fałsz to prawda...\nUppps, JS jednak to zrobiła");
}

I już działa prawidłowo.

Rozwiązanie II

Skoro zmienna `oBool' jest obiektem Boolean, to może warto skorzystać z jego właściwości. Jedną z nich jest `value'.

var oBool = new Boolean(false);
if (true === oBool.value)
{
    alert("Nam nikt nie powie, że fałsz to prawda...\nUppps, JS jednak to zrobiła");
}

W takiej sytuacji jednak tracimy na uniwersalności kodu, bo co jeśli ktoś przekaże nam prostą zmienną logiczną, a nie obiekt...

Rozwiązanie najlepsze

Nie używać `new Boolean'. Co to daje?

  • problem, wyżej opisany
  • zwolnienie pracy skryptu
  • zajęcie większej ilości pamięci
  • wydłużenie skryptu

Keep It Simple Stupid.

Komentarze (0) Trackbacks (0)

Brak komentarzy.


Leave a comment

 

Brak trackbacków.