2016-07-19 68 views
1

我正在閱讀寫在遊戲中的源代碼。有些線路的寫法如下:需要使用0與三元運算符進行澄清

0 ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y 

假設player與位置的精靈和global是剛剛從其中包含一些屬性的其他文件導入。上面的代碼是做什麼的?我覺得三元運營商將是這樣的:

c ? a : b 

其中ab是相同類型的並且c是條件。

但遊戲演示運行平穩,所以上面的代碼應該沒問題。我只是沒有明白代碼的含義。

的代碼從這裏提取:
https://github.com/huytd/agar.io-clone/blob/master/src/client/js/app.js

+3

'0'將使得條件爲假。但我沒有看到它的重點,那條線沒有任何用處。 –

+1

它看起來像有人翻轉的條件和當時的表達。 – Bergi

+0

@SpencerWieczorek但在開發者控制檯中運行0?1:2會記錄2,那麼是否會執行* global.screenHeight/2 - player.y *? – brk

回答

1

在上述三元語句0是條件。

false ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y 

因此,global.screenHeight/2 - player.y將返回:

因爲JavaScript把0作爲falsy,彷彿寫成的聲明進行評估。

作者可能會將三元組作爲開/關開關。通過用1替換0,三元語句將返回player.y > global.screenHeight/2

+0

所以這個'player.y> global.screenHeight/2'是沒用的?爲什麼會這樣寫呢? – newguy

+1

也許作者想保留一個開關來測試等等,這樣作者可以用'1'替換'0',並且返回其他語句。 –

+0

我認爲你有一點。 – newguy

0
c ? a : b 

ab可以評估任何類型的值,並且c將評估爲truefalse

0將評估爲false,「B」將運行:global.screenHeight/2 - player.y 這無論發生別的 - 第一個表達式將永遠不會運行。

如果我不得不猜測爲什麼在那裏,我會說它可能是一個計劃功能或改進的佔位符(但我顯然無法確定)。

+1

'0'''''不會是'false',它會**總是** false,因爲'0'是[falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy)值,並且總是被強制爲「false」。 –

+0

是的,只把可能性放在那裏,因爲我在一段時間內沒有使用過JS,也不想假設行爲(儘管在大多數情況下0應該被評估爲false) – VortixDev

0
0 ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y 

這裏0是假的,所以global.screenHeight/2 - player.y將始終執行