2012-12-26 67 views
2

浏览今天d3 source code我看到了下面一行:这个复杂的return语句在javascript中做了什么?

return delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time), 1; 

我一直在做日常的JavaScript多年,从来没有看到过。嘿?

+0

http://www.w3schools.com/js/js_comparisons.asp这些都是在每周的使用更JavaScripts比每日ES。可能是你之前没遇到过的原因。 – user93353

+8

你的代表..这个问题.. – iKlsR

+5

是的,总脑屁。一直忙着吃圣诞节。我会删除这个,但loganfsmyth值得点。 –

回答

14

它只是小于或等于。也许Ternary operator加上comma operator是什么让你失望?

这相当于此:

if (delay < elapsed) start(elapsed); 
else if (delay === elapsed) start(elapsed); 
else { 
    d3.timer(start, delay, time); 
} 
return 1; 
+3

哇。我发布了这个消息,在洗澡时立即意识到**当然**我知道什么是大于或等于平均值​​。非常抱歉。有一张Frieda Khalo与Leon Trotsky一起在我的道歉中露面:http://awesomepeoplehangingouttogether.tumblr.com/image/32307958593 –

+0

因此,它总是返回1,因为逗号具有更高的优先级,并将a分组?b:c表达式? ? – Paul

+0

@GeorgeMauer碰巧:)并不感到惊讶。是的,逗号运算符不会经常出现。我实际上认为它是由D3包装商添加的,但它看起来也是在原始来源中。尽管如此,我认为它不会带来太多好处。 – loganfsmyth

0

< =表示不太平等。

整条生产线你贴手段用简单的英语“,如果延迟小于经过,返回开始(经过),否则返回d3.timer的价值。

+0

@irrelephant是的,当然。谢谢,我纠正了这一点。 – Philipp

+1

逗号运算符更改返回值。 – irrelephant

1

这意味着如果左手操作数是小于等于右手操作数在近(如果不是全部)语言