2012-12-26 68 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

這意味着如果左手操作數是小於等於右手操作數在近(如果不是全部)語言