三元运算符返回"true : false"。为什么?

12

我的同事让我在我们的项目中用grep查找字符串"true : false",结果我发现了很多三元运算符明确返回true或false。例如:

return this.state == Cursor.CLOSED ? true : false;

不仅是我们的项目,许多模块/库都这样做。对我来说,这似乎是多余的,因为作者本可以像这样写:

return this.state == Cursor.CLOSED;

这是防御性编程针对JavaScript中的某些陷阱吗?还是只为了明确你正在返回什么?


3
如果状态为关闭,似乎只会返回true,这有什么问题?你的问题非常不清楚。 - Liam
3
我认为他的意思是可以简单地写成 return this.state == Cursor.CLOSED; - Vic
1
在我看来,如果 this.state == Cursor.CLOSED 已经为真了,那么这似乎是不必要的? - adeneo
在这种情况下,我猜作者没有意识到他/她可以直接返回比较的结果。然而,return foo || bar ? true : false;与仅return foo || bar非常不同。 - p.s.w.g
2
在这种情况下,它被用作!!的更显眼的版本。该值原本不是布尔值 - String.prototype.match返回一个数组。 - Chuck
显示剩余7条评论
2个回答

11

这是针对JavaScript中的某些陷阱进行的防御性编码吗?

不是的。 == 始终返回布尔值。

这个条件完全是多余的,被认为是一种不好的实践。 简化它!


1
此外,如果您需要在JavaScript中将其转换为布尔值,则常见的方法是对其进行两次取反,即!!nonBool - Aaron Dufour

3

虽然这是一个相当不必要的操作,在许多编程语言中,这是一个很常见的错误。由于等号操作符几乎只在条件语句中使用,一些不够熟练的程序员可能不知道,而有经验的程序员有时也会忘记它实际上可以用于比较值。从来没有任何主流的JavaScript实现需要这种用法。

“错误”在这里感觉有点不好,因为代码是正确的,只是冗长了。但我想你知道我的意思。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接