【问题标题】:Convert truthy or falsy to an explicit boolean, i.e. to True or False将truthy或falsy转换为显式布尔值,即True或False
【发布时间】:2015-09-18 06:22:21
【问题描述】:

我有一个变量。我们就叫它toto吧。

toto 可以设置为undefinednull、字符串或对象。

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

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

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

如果 toto 是 undefinednulltrue,第一个 ! 将设置为 false,否则第二个将反转它。

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

我已经查看了this question,但我想在变量中设置一个值,而不仅仅是在if 语句中检查它。

【问题讨论】:

  • 这个问题被标记为重复但如果你看另一个问题stackoverflow.com/questions/263965/…它是完全不同的;它们根本不是重复的
  • @Sam 对不起,我确认了这个重复,我不知道这个其他问题,但它确实解决了我的问题。
  • @Aracthor 这不是重复的,因为stackoverflow.com/questions/263965/… 是关于将仅包含单词“true”和“false”的字符串转换为其布尔对应项。这个问题是关于根据它是真还是假将任何变量转换为布尔值。
  • 在MDN上,根据Double NOT (!!),也可以通过Boolean函数进行“真实”转换。

标签: javascript boolean-expression


【解决方案1】:

是的,您可以随时使用:

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

【讨论】:

  • 注意,Boolean("false") 为真,而您可能希望它为假。
  • 为什么你希望字符串“false”是假的?甚至 php 也不这样做:D
  • 他的意思是Boolean("false")
  • @NoahDavid 它返回真。转换为 false 的唯一字符串是空字符串 ("")。
  • 没错。这就是为什么在使用短语“false”时必须小心的原因,如果它在引号中并因此被解释为字符串。您可能认为您将其转换为 false,但实际上它会返回 true - 因此是原始警告。
【解决方案2】:

您可以使用Boolean(obj)!!objtruthy/falsy 转换为true/false

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

【讨论】:

  • 其实这行不通。那些总是返回true,即使是空对象。试试:Boolean({})!!{}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2011-04-27
  • 1970-01-01
  • 2020-06-02
  • 2022-12-04
相关资源
最近更新 更多