Перетворити неправдиве чи хибне на явний булев


97

У мене є змінна. Назвемо це toto.

Це totoможе бути встановлено undefined, null, рядок або об'єкт.

Я хотів би перевірити, чи totoвстановлено значення даних, що означає встановити рядок або об'єкт, а не undefinedні null, а також встановити відповідне логічне значення в іншій змінній.

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

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

Перший !буде встановлений , falseякщо Тото undefinedабо nullй trueще, а другий один буде інвертувати.

Але це виглядає трохи дивно. То чи є більш зрозумілий спосіб це зробити?

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


10
Це запитання позначено як дублікат, але якщо ви подивитесь на інше запитання stackoverflow.com/questions/263965/…, воно зовсім інше; вони взагалі не є дублікатами
Сем

@Sam Вибачте, але я підтвердив себе цим дублікатом, я не знав про це інше питання, але це вирішило мою проблему.
Aracthor

11
@Aracthor Це НЕ дублікат, оскільки stackoverflow.com/questions/263965/… - це перетворення рядка, що містить лише слова "true" та "false", у їхні логічні аналоги. Це питання стосується перетворення БУДЬ-ЯКОЇ змінної в булеву, залежно від того, є вона неправдивою чи хибною.
Алан Макбі - MSFT

Відповіді:


153

Так, ви завжди можете використовувати це:

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
Зауважимо, що логічне значення ("false") є істинним, коли ви, мабуть, хочете, щоб воно було хибним.
Стерлінг Борн,

45
Чому б ви хотіли, щоб рядок "false" був хибним? Навіть php цього не робить: D
Данон

1
Він має на увазі Boolean("false").
Robo Robok

2
@NoahDavid Це повертається правдою. Єдиний рядок, що відливається, false- це порожній рядок ( "").
Robo Robok

6
Точно так. Ось чому ви повинні бути обережними, використовуючи фразу "false", якщо вона в лапках і, таким чином, трактується як рядок. Можливо, ви думаєте, що перетворюєте його на помилкове, але насправді воно повернеться істинним - звідси оригінальне попередження.
Стерлінг Борн,

0

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

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.