Проблем с true/false в JavaScript


0

Здравейте, имам 1 проблем с булевите променливи и не мога да разбера защо работят така.

var isFalse = false;
if(isFalse)  console.log("text"); 

До тук всичко работи добре, променливата е false и за това не се изпълнява условието, но ако напиша следното :


var isFalse = new Boolean(false);
if(isFalse) console.log("text");

Тук създаваме обект, в който се съдържа стойността false, но този път се изпълнява условието - защо така ? 

 




Отговори



3
Вторият път се изпълнява,защото проверката ти е такава. if (isFalse) ще провери дали променливата е undefined, null, 0 или празен стринг. За проверка дали е false - if (isFalse == false). При var isFalse = false като напишеш console.log(isFalse) стойността е false, a при new Boolean(false) се създава обект, който е false. Просто проверката ти дали променливата е false не e правилна. С new Boolean() се създава wrapper обект. Може да се направи и следното:
var isFalse; var booleanObject = new Boolean(isFalse); booleanObject .isFalse = false; console.log(booleanObject.isFalse); // false
По принцип не е добра практика за това да се ползва обект Boolean, след като може да се ползва примитивен тип данни. Всеки обект, който има стойност undefined,null (в случая при isFalse = new Boolean(false)) ще мине такава проверка - if (isFalse) // do something

от D.Andreev (468 точки)