需要使用0和三元运算符进行说明

时间:2016-07-19 04:42:45

标签: javascript ternary-operator

我正在阅读游戏中编写的源代码。有些行写成如下:

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)

在上面的三元语句中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

ab可以评估为任何类型的值,c将评估为truefalse

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将始终执行