Преобразование правдивости или ложности в явное логическое значение

101

У меня есть переменная. Назовем это toto.

Это totoможет быть установлено undefined, null, строку или объект.

Я хотел бы проверить , если totoустановлен на данных, что означает , установленного в строку или объект, и ни один, undefinedни null, и множество , соответствующее логическое значение в другой переменной.

Я подумал о синтаксисе !!, который будет выглядеть так:

var tata = !!toto; // tata would be set to true or false, whatever toto is.

Первый !будет установлен в falseif toto is undefinedor nulland trueelse, а второй инвертирует его.

Но это выглядит немного странно. Так есть более четкий способ сделать это?

Я уже рассматривал этот вопрос , но я хочу установить значение в переменной, а не просто проверять его в ifинструкции.

Арактор
источник
10
Этот вопрос отмечен как повторяющийся, но если вы посмотрите на другой вопрос stackoverflow.com/questions/263965/…, он будет совсем другим; они вовсе не дубликаты,
Сэм
@Sam Извините, но я подтвердил себе этот дубликат, я не знал об этом другом вопросе, но он решил мою проблему.
Aracthor 01
11
@Aracthor Это НЕ дубликат, потому что stackoverflow.com/questions/263965/… предназначен для преобразования строки, содержащей только слова «истина» и «ложь», в их логические аналоги. Этот вопрос касается преобразования ЛЮБОЙ переменной в логическое значение в зависимости от того, является ли она истинной или ложной.
Алан Макби - MSFT

Ответы:

159

Да, вы всегда можете использовать это:

var tata = Boolean(toto);

А вот несколько тестов:

for (var value of [0, 1, -1, "0", "1", "cat", true, false, undefined, null]) {
    console.log(`Boolean(${typeof value} ${value}) is ${Boolean(value)}`);
}

Полученные результаты:

Boolean(number 0) is false
Boolean(number 1) is true
Boolean(number -1) is true
Boolean(string 0) is true
Boolean(string 1) is true
Boolean(string cat) is true
Boolean(boolean true) is true
Boolean(boolean false) is false
Boolean(undefined undefined) is false
Boolean(object null) is false
Робо Робок
источник
75
Следует отметить, что логическое значение («ложь») истинно, когда вы, вероятно, хотите, чтобы оно было ложным.
Стерлинг Борн,
45
С какой стати вы хотите, чтобы строка «ложь» была ложной? Даже PHP не делать этого: D
Danon
1
Он имеет в виду Boolean("false").
Robo Robok
2
@NoahDavid Возвращает истину. Единственная приведенная строка false- это пустая строка ( "").
Робо Робок,
6
В яблочко. Вот почему вы должны быть осторожны при использовании фразы «false», если она заключена в кавычки и поэтому интерпретируется как String. Вы можете подумать, что приводите его к false, но на самом деле он вернет true - отсюда и исходное предупреждение.
Стерлинг Борн,
2

Вы можете использовать Boolean(obj)или !!objдля преобразования truthy/falsyв true/false.

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
yaya
источник