【问题标题】:Casting a String to Boolean in Javascript在Javascript中将字符串转换为布尔值
【发布时间】:2017-07-02 03:26:27
【问题描述】:

在Javascript中,有什么区别 if(!!isLoaded)if(Boolean(isLoaded))?

我最近开始开发一个应用程序,以前的开发人员经常这样做。

我进行了一些测试,它们似乎都将字符串“true”和“false”转换为布尔类型,我认为这是这样做的主要原因。

如果它们确实相同,那么大家对哪一个更具可读性有什么看法?

【问题讨论】:

  • 两者都会将字符串"true""false" 转换为布尔值true。但是,是的,它们做的事情完全相同。
  • 没有更多的可读性 - 你想要的也没有
  • 两者区别不大,也相当于if(isLoaded),我认为是最易读的。
  • 是的,@Barmar 是对的(不出所料)——当你真的想要一个真正的布尔值来跟踪时,通常会使用这些转换;如果它只是一个if 语句,那么没有意义,因为if 条件的评估无论如何都会做同样的事情。

标签: javascript string types casting boolean


【解决方案1】:

if (!!isLoaded)if (Boolean(isLoaded)) 都将等同于 if (isLoaded),因为 JavaScript 只查找 if 条件的真实值。如果您需要特定的字符串"true""false",则需要直接与if (isLoaded === "true") 进行比较。

【讨论】:

    【解决方案2】:

    我个人觉得!! 更容易阅读。不过,它们都转换为布尔值。

    但是,就像 jaromeda 提到的,两者都不适用于这种情况。字符串 "true" 和 "false" 的结果都是 true,因为值存在。

    【讨论】:

      【解决方案3】:

      空字符串在 JS 中已经被视为否定条件,确实,...

      以下在JS中被视为否定条件

      • 0??const v = 0 ; (!v) && doSomething()

      • 空字符串 ?? const v = '' ; (!v) && doSomething() ⬅ ⚠️ 请注意,因为您的问题是关于将字符串转换为布尔值。

      • false ?? const v = false ; (!v) && doSomething()

      • null??const v = null ; (!v) && doSomething()

      • undefined??const v = undefined ; (!v) && doSomething()

      这 5 个值使用== 等于,而不等于使用===


      否则,v 被视为肯定条件

      let zero = 0 ;
      let falseVar = false; 
      
      console.log(` zero == falseVar ? `, zero == falseVar);
      console.log(` zero === falseVar ? `, zero === falseVar);
      
      let emptyString= ''
      console.log(` zero == emptyString ? `, zero == emptyString);
      console.log(` zero === emptyString ? `, zero === emptyString);

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 2011-05-19
        • 2017-06-03
        • 2018-09-07
        • 1970-01-01
        • 2020-01-31
        • 2018-09-10
        相关资源
        最近更新 更多