我正在阅读游戏中编写的源代码。有些行写成如下:
0 ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y
假设player
是一个带位置的精灵,global
只是从包含一些属性的其他文件导入的。上面的代码是做什么的?我认为三元运算符将是这样的:
c ? a : b
其中a
和b
属于同一类型,c
是条件。
但游戏演示运行顺利,所以上面的代码应该没问题。我只是没有得到代码的含义。
代码摘自此处:
https://github.com/huytd/agar.io-clone/blob/master/src/client/js/app.js
答案 0 :(得分:1)
在上面的三元语句中0
是条件。
因为Javascript将0
视为falsy
,所以语句的评估方式如下:
false ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y
因此,将返回global.screenHeight/2 - player.y
。
作者可能会将三元组件作为开/关开关。通过将0
替换为1
,三元语句将返回player.y > global.screenHeight/2
。
答案 1 :(得分:0)
c ? a : b
a
和b
可以评估为任何类型的值,c
将评估为true
或false
。
0
将评估为false
,“b”将运行:global.screenHeight/2 - player.y
无论其他什么都会发生这种情况 - 第一个表达式永远不会运行。
如果我不得不猜测为什么会出现这种情况,我会说它可能是一个计划功能或改进的占位符(但我显然无法确定)。
答案 2 :(得分:0)
0 ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y
这里0为假,所以global.screenHeight/2 - player.y
将始终执行