【问题标题】:Ternary operators returning "true : false". Why?三元运算符返回“真:假”。为什么?
【发布时间】:2014-08-03 00:47:14
【问题描述】:

同事让我通过我们的项目对字符串“true : false”进行 grep,我发现很多三元运算符返回显式 true 或 false。例如:

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

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

return this.state == Cursor.CLOSED;

它是针对 Javascript 中的一些问题的防御性编码吗?或者只是明确说明您要返回的内容?

【问题讨论】:

  • 如果状态关闭,这似乎只是返回true? What's wrong with that?你的问题很不清楚。
  • 我想他问的是return this.state == Cursor.CLOSED;
  • 对我来说这似乎是不必要的,如果this.state == Cursor.CLOSED 它已经是真的了吗?
  • 在这种情况下,我猜作者没有意识到他/她可以只返回比较的结果。但是,return foo || bar ? true : false;return foo || bar 非常不同。
  • @RossHettel:在这种情况下,它被用作!! 的更突出版本。该值还不是布尔值——String.prototype.match 返回一个数组。

标签: javascript node.js ternary-operator


【解决方案1】:

它是针对 Javascript 中的一些问题的防御性编码吗?

没有。 == 总是返回一个布尔值。

条件是完全多余的,被认为是一种不好的做法。 Simplify it!

【讨论】:

  • 另外,如果您需要在 javascript 中转换为布尔值,常用的方法是两次取反,即!!nonBool
【解决方案2】:

这完全没有必要,但在许多语言中这是一个很常见的错误†。因为相等运算符几乎只用于条件,所以一些知识较少的程序员不知道,更有经验的程序员偶尔会忘记它实际上可以用于它的值。从来没有任何主要的 JavaScript 实现具有使这成为必要的怪癖。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2014-12-18
    相关资源
    最近更新 更多