翻译混乱的条件速记

时间:2018-04-23 14:55:27

标签: javascript conditional shorthand

以下是声明:

var H = dr ? ((C < 0 ? 0 : 1) - C) / dr : 0

dr和C是花车。

我不知道&#34; dr?&#34;意味着因为它只是一个浮点而不是真/假值。

我想知道是否有人可以将其翻译成传统的if-else语句。 &#34; / dr:0&#34;事情让我很困惑。

3 个答案:

答案 0 :(得分:3)

Leo Li's answer提供翻译,但您的问题似乎更多地是将dr用作布尔值,当它是“浮动”时:

  

我不知道“博士是什么?”意思是因为它只是一个浮点而不是真/假值。

没有必要这样做。 JavaScript强制改变价值观。如果dr确实是一个数字,dr ? x : y如果x不是dr而不是0,那么NaN会评估为ydr如果0NaNif (value)

更一般地说:任何时候在某个条件中使用某个值(无论是您的问题中的条件运算符,还是while (value),或false等),任何 falsy < / em>值强制转换为true,任何 truthy 值强制转换为0。虚假值为NaN""nullundefinedfalse,当然还有 if 'media' in tweet.entities: for media in tweet.extended_entities['media']: print media['media_url'] ;所有其他价值都是真实的。

答案 1 :(得分:2)

这是一个等效形式:

var H;

if (dr) {
  if (C < 0) {
    H = (0 - C) / dr
  } else {
    H = (1 - C) / dr
  }
} else {
  H = 0
}

一些解释:

  1. 条件语句仅查看语句(在这种情况下为(dr))是否为真值。 JavaScript中的每个对象都可以评估为truefalse。没有必要是布尔类型。

  2. null(对象),undefined(未定义),NaN(数字),false(布尔值),''(字符串) ,+0/-0(数字)在JavaScript中被评估为false

  3. 由于dr是一个浮点数(即Number,没有float基元类型),除非它是0或{{ 1}}。

  4. 关于三元表达的问题。人们可能会考虑使用伪代码:

  5. NaN

    (conditional_statement) ? (truthy_condiction) : (falsey_condiction);包裹它,即(),或者只是按行分开,就像我在上面所做的那样,会让它更容易被理解。

答案 2 :(得分:1)

在Javascript中有许多虚假值,在条件表达式中计算时等于false: Falsy values

如果dr为0或任何其他假值,H将为0,否则,它将评估包含另一个三元条件的表达式((C < 0 ? 0 : 1) - C) / dr的值,将以同样的方式再次评估