Nie do końca rozumiem, dlaczego Oświadczenie if oceniają true, ale porównanie console.log nie.

Dwukrotnie sprawdziłem Dokumentacja MDN i mówią {} jest wartością prawdą. Więc dlaczego nie zgadzam się moja console.log?

Spróbowałem, jako ostatni rowie, używając == zamiast ===.

var test = {};
    
console.log(test);          
console.log(test === true); 
console.log({} === true);   
    
if ({}) {
    console.log('What the ?');
} 
6
yohohosilver 4 czerwiec 2018, 01:55

3 odpowiedzi

Najlepsza odpowiedź

=== nie jest sposobem sprawdzenia, czy wartość jest prawdą w sposób sprawdzający. Na przykład, wszystkie poniższe są prawdą. Ale jeśli spróbujesz zrobić === za pomocą true spowodują false inne niż wartość prawdą {x4}}

if (true)
if ({})
if ([])
if (42)
if ("foo")
if (new Date())
if (-42)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
console.log(true === true);
console.log({} === true);
console.log([] === true);
console.log(42 === true);
console.log("foo" === true);
console.log((new Date()) === true);
console.log(-42 === true);
console.log(3.14 === true);
console.log(-3.14 === true);
console.log(Infinity === true);
console.log(-Infinity === true);

Możesz sprawdzić prawdawę, używając !!value. Na przykład

var test = {};
console.log(!!test === true);

Podobnie możemy sprawdzić dla wszystkich powyższych prawdów, co następują:

console.log(!!true === true);
console.log(!!{} === true);
console.log(!![] === true);
console.log(!!42 === true);
console.log(!!"foo" === true);
console.log(!!(new Date()) === true);
console.log(!!-42 === true);
console.log(!!3.14 === true);
console.log(!!-3.14 === true);
console.log(!!Infinity === true);
console.log(!!-Infinity === true);
7
Md Johirul Islam 3 czerwiec 2018, 23:12

{} jest prawdą w JavaScript, dlatego blok jest wykonywany.

Jednak nie jest to ściśle true, więc potrójne równe porównanie daje fałszywe.

Więcej informacji:

0
pyb 3 czerwiec 2018, 22:59

{{X0}. . Najpierw sprawdza, czy typy jego operandów są takie same, a potem mają tę samą wartość.

W {} === true lewa strona ma typ object, gdy prawa strona ma typ boolean, więc ocenia się false.

Wiele wartości nie jest równe true, ale nadal są prawdziwe. Podobnie istnieją wartości, które są falsowe, ale nie równe false.

0
melpomene 3 czerwiec 2018, 23:00