2014-12-31 12 views
6
deletemode = new Boolean(false); 

if(deletemode) alert("TRUE"); else alert("FALSE"); 

alert(deletemode); 

miałem nadzieję zobaczyć FAŁSZ alert ale widzę TRUE alertUtwórz zmienną logiczną JavaScript

czytam MDN i czytać

deletemode = new Boolean(true); 

To jest droga do stworzenia fałszywego zmienną logiczną

Ale kiedy uruchomię powyższe stwierdzenia, widzę "PRAWDA", a następnie w drugim ostrzeżeniu widzę fałsz.

Jeśli zrobić to robi to, czego oczekuję to zrobić

if(deletemode===false) 

Czy

if(deletemode) 

błąd składni JavaScript?

+0

To wygląda oczekiwanego zachowania według MDN. Zobacz tam pierwszy przykład kodu. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean – Gohn67

+2

W mojej przeglądarce wyrażenie 'deletemode === false' zwraca wartość" false ", a nie" true ". – Alnitak

+0

@Alnitak Myślę, że on mówi o przypadku 'if (deletemode)' zwraca 'true', co wydaje się być oczekiwanym zachowaniem. – Gohn67

Odpowiedz

7

Powód jest nieoczekiwany, ponieważ new Boolean(false) zwraca obiekt. W JS wszystkie obiekty oceniają wartość prawdy. Dlatego twój test zaalarmował "PRAWDA", ponieważ konstrukcja "jeśli" po prostu sprawdza, czy wyrażenie jest zgodne z prawdą.

Ponadto, nigdy nie powinieneś tworzyć wartości boolowskiej za pomocą funkcji konstruktora Boolean. Zamiast tego po prostu użyj wartości literalnych, true lub false.

+0

true false to wartości ciągu? –

+1

Nie, true i false są dosłownymi wartościami logicznymi. Łańcuchy "true" i "false" są wartościami łańcuchowymi. – wmock

3

Operator ścisłej równości === zwróci false od obiektu Boolean, a literał boolowski nie jest dokładnie taki sam. W rzeczywistości, nawet ta zwróci false, ponieważ dwie nowo utworzone obiekty nie są takie same obiektu:

new Boolean(true) === new Boolean(true) // is false 

Jednak test deletemode == false powróci true ponieważ będzie ona wywołać metodę .valueOf() na obiekcie i uzyskać wartość false , który w związku z tym poprawnie porównuje się z false.

Funkcja alert() zawsze wywołuje .toString() na jego parametr, dlatego też wyświetlanie false zamiast domyślnego [Object object].

1

Myślę, że możesz znaleźć odpowiedzi na poniższy link. Krótka odpowiedź: za pomocą nowego konstruktora Boolean() tworzony jest wrapper wokół wartości, dzięki czemu wywołanie zmiennej zawsze zwraca wartość true. Jeśli chcesz tylko przechowywać true/false, bez żadnych dodatkowych funkcji lub logiki na zmiennej trzymającej wartość, powinieneś prawdopodobnie po prostu przypisać ją bezpośrednio. czyli var deletemode = false

What is the purpose of new Boolean() in Javascript?

Powiązane problemy