将真实或虚假转换为显式布尔值


97

我有一个变量。叫它toto

toto可以设置为undefinednull,字符串,或一个对象。

我想检查是否toto设置为数据,这意味着设置为字符串或对象,也undefined没有null设置为,并在另一个变量中设置相应的布尔值。

我想到了语法!!,看起来像这样:

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

第一个!将被设置为false如TOTO的undefined还是nulltrue别人,和第二个会倒转。

但是看起来有点奇怪。那么有没有更清晰的方法可以做到这一点?

我已经看过这个问题,但我想在变量中设置一个值,而不仅仅是在if语句中检查它。


10
这个问题被标记为重复,但是如果您查看另一个问题 stackoverflow.com/questions/263965/…则完全不同。它们根本不是重复的
2015年

@Sam对不起,但是我确认了自己这个重复,我不知道其他问题,但是确实解决了我的问题。
Aracthor

11
@Aracthor这不是重复项,因为stackoverflow.com/questions/263965/…是关于将仅包含单词“ true”和“ false”的字符串转换为其布尔值对应的字符串。这个问题是关于根据变量是真还是假将ANY变量转换为布尔值。
艾伦·麦克比

Answers:


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
值得注意的是,当您可能希望Boolean(“ false”)为false时,它为true。
Sterling Bourne

45
为什么在地球上您希望字符串“ false”是虚假的?甚至php也不能做到这一点:D
Danon

1
他的意思是Boolean("false")
Robo Robok

2
@NoahDavid它返回true。强制转换false为的唯一字符串是一个空字符串("")。
Robo Robok

6
究竟。这就是为什么在使用短语“ false”(如果用引号将其解释为字符串)时必须要小心的原因。您可能会认为您将其强制转换为false,但实际上它将返回true-因此是原始警告。
Sterling Bourne

0

您可以使用Boolean(obj)!!obj转换truthy/falsytrue/false

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.