【发布时间】:2018-12-25 07:05:12
【问题描述】:
我想验证一个具有三个布尔属性的对象,其中一个且只有一个必须为真。最好的检查方法是什么?
我想出了这个:
var t1 = obj.isFirst ? 1 : 0,
t2 = obj.isSecond ? 1 : 0,
t3 = obj.isThird ? 1 : 0;
var valid = (t1 + t2 + t3) === 1;
这很好用,但感觉有点像业余爱好者的解决方案:-)
有没有更好的方法来做到这一点?以 XOR (^) 为例?
【问题讨论】:
-
obj.isFirst + obj.isSecond + obj.isThird === 1,假设它们是布尔值而不是不同的东西。如果您愿意,可以添加显式转换(例如Number(obj.isFirst)),但 javascript 也可以隐式转换。 -
'感觉有点像业余爱好者的解决方案' 我可以向您保证,专业人士 编写的代码看起来完全像这样。不要担心你的代码看起来如何,没有人会看到它,确保编译器可以读取它并且它应该做它应该做的事情。
-
@Michiel 作为可能不得不来维护您正在编写的代码的人,请不要这样做。它只会使您的代码在未来更难阅读和维护,并提供 0 好处。
-
@Liam 这句话指的是人们关心自己的执行时间。它在这里不适用,因为这个问题是关于可读性、避免错误(通过更明显、更好阅读)和更容易重构。
-
只是一个注释,而不是一个答案:我认为这是一个错误的模型。最好有:
obj.position = (1|2|3)
标签: javascript