Преобразование истинности или ложности в явное логическое значение, то есть в True или False

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

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

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

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

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

Первому ! будет присвоено значение false, если toto равно undefined или null и true иначе, а второму - инвертировать его.

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

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


person Aracthor    schedule 01.07.2015    source источник
comment
Этот вопрос отмечен как повторяющийся, но если вы посмотрите на другой вопрос stackoverflow.com/questions/263965/, это совсем другое; они совсем не дубликаты   -  person Sam    schedule 01.07.2015
comment
@Sam Извините, но я подтвердил себе этот дубликат, я не знал об этом другом вопросе, но он решил мою проблему.   -  person Aracthor    schedule 01.07.2015
comment
@Aracthor Это НЕ дубликат, потому что stackoverflow.com/questions/263965/ - это преобразование строки, содержащей только слова true и false, в их логические аналоги. Этот вопрос касается преобразования ЛЮБОЙ переменной в логическое значение в зависимости от того, является ли она правдивой или ложной.   -  person Alan McBee    schedule 29.11.2017


Ответы (2)


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

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
person Robo Robok    schedule 01.07.2015
comment
Следует отметить, что логическое значение (ложь) истинно, когда вы, вероятно, хотите, чтобы оно было ложным. - person Sterling Bourne; 11.08.2017
comment
Почему вы хотите, чтобы строка false была ложной? Даже php этого не делает: D - person Danon; 11.09.2017
comment
@NoahDavid Я не понял, что вы пытаетесь сказать. Я просто запустил код Boolean(false) в консоли разработчика, и он вернул false. В каком контексте он вернет true? - person RBT; 20.09.2017
comment
Он имеет в виду Boolean("false"). - person Robo Robok; 20.09.2017
comment
@RBT - Что возвращает логическое (ложное) значение? - person Sterling Bourne; 27.09.2017
comment
@NoahDavid Возвращает истину. Единственная строка, приведенная к false, - это пустая строка (""). - person Robo Robok; 28.09.2017
comment
Точно. Вот почему вы должны быть осторожны при использовании фразы false, если она заключена в кавычки и поэтому интерпретируется как String. Вы можете подумать, что приводите его к false, но на самом деле он вернет true - отсюда и исходное предупреждение. - person Sterling Bourne; 28.09.2017
comment
О чем ты говоришь? - person Robo Robok; 27.01.2019
comment
да правда Boolean("false") верните истину лол используйте это Boolean(JSON.parse("false")) - person Danish; 27.03.2019
comment
Остерегаться! var b = Boolean(false); if (b) { console.log('The Boolean object is not null nor undefined, thus passes the condition') } - person plesatejvlk; 15.07.2019
comment
@plesatejvlk какой браузер? Я проверил на macOS (Chrome, Firefox, Safari), все они не запускали код внутри if(). - person Robo Robok; 15.07.2019
comment
@RoboRobok Мое плохое. Это должно было быть var b = new Boolean (false) согласно developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ - person plesatejvlk; 15.07.2019
comment
@SterlingBourne function bool (item) {return item === 'false'? false: Boolean (элемент)} - person DeltaTango; 14.09.2019
comment
Строка false никогда не должна оцениваться как ложная. Есть важные причины по-разному относиться к строке false и логической false. Представьте, что кто-то вводит свое имя в вашу базу данных как «false» ... вы хотите напечатать имя или начать выдавать ошибки? Автоматическое преобразование строк в разные типы в зависимости от их содержимого - опасная игра. - person Brandon; 28.10.2019
comment
в зависимости от ваших потребностей: Boolean(String(v).toLowerCase() === "false" ? false : v) - person Nick Franceschina; 26.04.2021

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

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
person yaya    schedule 16.07.2020