【问题标题】:Different ways in checking if a number is greater than zero (0)检查数字是否大于零 (0) 的不同方法
【发布时间】:2019-06-11 11:12:56
【问题描述】:

在检查数字类型是否大于零 (0) 时,使用 条件强制布尔转换 有什么区别?

每个都会给出相同的输出

var zero = 0;
var three = 3;

// condition
zero > 0 //false
three > 0 //true
null > 0 //false

// coercion
zero ? true : false; //false
three ? true : false; //true
null ? true : false; //false

// Boolean conversion
Boolean(zero); //false
Boolean(three); //true
Boolean(null); //false

这些操作有什么区别? (在速度/性能、原则、实践等方面)

【问题讨论】:

  • 为什么对已经是布尔值的条件运算符?顺便说一句,零是假的,任何负数都是真的。
  • zero > 0 是一个布尔值,而 zero ? ... 是一个 truthy or falsy 值。顺便说一句zero > 0 zero > 0 ? true : false
  • 条件表达式是唯一在检查负数时有效的表达式,所以我猜使用那个更有意义...
  • @ColdCerberus 你用得很好,它与真实的不同,一个很好的答案:stackoverflow.com/a/19915864/3936644

标签: javascript if-statement type-conversion conditional coercion


【解决方案1】:

你提到的条件强制都是隐式强制

隐式强制指的是不可读或对开发人员不友好的类型转换。从我了解到的情况来看,对隐式强制的许多仇恨来自这样一个事实,即它没有具体说明要转换的内容,因此可能会产生意想不到或意想不到的结果。

布尔转换显式强制,这意味着它对开发人员来说更具可读性,并指定要转换的内容(与隐含的不同)。

对于您的问题,我没有关于速度/性能和原则的可靠答案,但如果您担心可读性(供将来参考或其他开发人员),布尔转换是路要走。

【讨论】:

    【解决方案2】:

    在这种情况下,布尔转换isGreaterThanZero= Boolean(zero)在速度/性能方面是最好的,因为这背后没有逻辑条件(if..else)。

    其余方法条件和强制转换由于其逻辑条件(if..else)而有点慢。

    isGreaterThanZero= zero > 0
    isGreaterThanZero= zero ? true : false
    

    【讨论】:

      【解决方案3】:

      条件和强制都使用 js 布尔逻辑(更多细节可以查看 ECMA-262 标准),而布尔构造函数实际上是自己实现了这个逻辑。

      因此速度/性能 -> Boolean() 获胜。原则/实践/等-> 取决于你遵循的代码风格

      【讨论】:

        猜你喜欢
        • 2013-05-27
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多