以下是声明:
var H = dr ? ((C < 0 ? 0 : 1) - C) / dr : 0
dr和C是花车。
我不知道&#34; dr?&#34;意味着因为它只是一个浮点而不是真/假值。
我想知道是否有人可以将其翻译成传统的if-else语句。 &#34; / dr:0&#34;事情让我很困惑。
答案 0 :(得分:3)
Leo Li's answer提供翻译,但您的问题似乎更多地是将dr
用作布尔值,当它是“浮动”时:
我不知道“博士是什么?”意思是因为它只是一个浮点而不是真/假值。
没有必要这样做。 JavaScript强制改变价值观。如果dr
确实是一个数字,dr ? x : y
如果x
不是dr
而不是0
,那么NaN
会评估为y
,dr
如果0
为NaN
或if (value)
。
更一般地说:任何时候在某个条件中使用某个值(无论是您的问题中的条件运算符,还是while (value)
,或false
等),任何 falsy < / em>值强制转换为true
,任何 truthy 值强制转换为0
。虚假值为NaN
,""
,null
,undefined
,false
,当然还有 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
}
一些解释:
条件语句仅查看语句(在这种情况下为(dr)
)是否为真值。 JavaScript中的每个对象都可以评估为true
或false
。没有必要是布尔类型。
null
(对象),undefined
(未定义),NaN
(数字),false
(布尔值),''
(字符串) ,+0/-0
(数字)在JavaScript中被评估为false
。
由于dr
是一个浮点数(即Number
,没有float
基元类型),除非它是0
或{{ 1}}。
关于三元表达的问题。人们可能会考虑使用伪代码:
NaN
用(conditional_statement)
? (truthy_condiction)
: (falsey_condiction);
包裹它,即()
,或者只是按行分开,就像我在上面所做的那样,会让它更容易被理解。
答案 2 :(得分:1)
在Javascript中有许多虚假值,在条件表达式中计算时等于false: Falsy values
如果dr
为0或任何其他假值,H
将为0,否则,它将评估包含另一个三元条件的表达式((C < 0 ? 0 : 1) - C) / dr
的值,将以同样的方式再次评估