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

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

alert(deletemode); 

ben MDN okuyun ve sahte boolean değişken oluşturmak için yoludur YaniJavaScript boolean değişkeni oluşturun

deletemode = new Boolean(true); 

okumak ben DOĞRU uyarısı

görüyorum YANLIŞ uyarısı görmeyi umuyordum fakat

Ancak yukarıdaki ifadeleri çalıştırdığımda "TRUE" yi görüyorum ve sonra ikinci uyarıda false'yi görüyorum. Eğer bunu yaparsam

ben o

if(deletemode===false) 

if(deletemode) 

bir JavaScript sözdizimi hatası mı yapmasını istediğiniz şeyi yapar?

+0

sahte yani var deletemode = MDN'yi göre beklenen davranış gibi görünüyor. Orada ilk kod örneğini görün. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean – Gohn67

+2

Tarayıcımda 'deletemode === false'' false' yerine “true” olarak değerlendirir. – Alnitak

+0

@Alnitak Sanırım, bu durumdan bahsediyor, eğer (falsede) 'beklenen' davranışa dönüşüyorsa, 'true' döndürüyor. – Gohn67

cevap

7

Bunun beklenmedik nedeni, new Boolean(false)'un bir nesne döndürmesidir. JS'de, tüm nesneler gerçek bir değere değerlendirir. Bu nedenle testiniz 'TRUE' uyarısıdır çünkü 'if' yapısı ifadenin doğru olup olmadığını kontrol eder. Ayrıca, Boole yapıcısı işlevini kullanarak hiçbir zaman bir boole oluşturmamalısınız. Bunun yerine, yalnızca, true veya false değerlerini kullanın.

+0

doğru yanlış bu dize değerleri nelerdir? –

+1

Hayır, doğru ve yanlış, literal boole değerleridir. Dizeler 'gerçek' ve 'yanlış' dize değerleridir. – wmock

3

=== katı eşitlik işleci, Boolean nesnesi ve boolean değişmezi tam olarak eşit olmadığından false döndürecektir. İki yeni oluşturulan nesneler aynı nesne değildir çünkü Aslında, bu bile yanlış döndürür: o nesne üzerinde .valueOf() yöntemini çağırın ve değer alacak çünkü

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

Ancak bir deletemode == false testi true dönecektir false Bu nedenle, doğru olarak false'a eşittir.

alert() işlevi her zaman bu nedenle de yerine varsayılan [Object object] ait false gösteren kendi parametresine .toString() çağırır.

1

Aşağıdaki linkten bazı cevaplar bulabileceğinizi düşünüyorum. Kısa cevap: Yeni Boolean() yapıcısını kullanmak, değerinizin etrafında bir sarıcı oluşturur, böylece değişkeni çağırmak her zaman doğru döner. Tek yapmanız gereken, herhangi bir ek fonksiyon veya mantık değeri olmayan doğru/yanlış değerini saklamaksa, değeri doğrudan atamanız gerekir. var

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

İlgili konular