【问题标题】:return !1 in javascript在javascript中返回!1
【发布时间】:2023-03-03 06:01:21
【问题描述】:

我刚刚在 javascript 中遇到了一个具有 return !1 的函数

我只是想知道这究竟意味着什么?

你为什么要return !1return !0

有人能解释一下这是什么意思吗?

这是我遇到的函数:

function convertStringToBoolean(a) {
    typeof a == "string" && (a = a.toLowerCase());
    switch (a) {
    case "1":
    case "true":
    case "yes":
    case "y":
    case 1:
    case !0:
        return !0;
    default:
        return !1
    }
}

提前致谢!

【问题讨论】:

标签: javascript function return


【解决方案1】:

立即回复您的问题:

  • return !1 等价于 return false
  • return !0 等价于 return true

在规范 - 11.4.9 Logical NOT Operator - 它声明当您在前面放置一个感叹号 ! 时,结果被评估为布尔值并返回相反的结果。

Example:

var a = 1, b = 0;
var c = a || b;
alert("c = " + c + " " + typeof c); // here typeof c will be "number"

a = !0, b = !1;
c = a || b;
alert("c = " + c + " " + typeof c); // here typeof c will be "boolean"

我主要在通过 Google 的JS optimiser 传递的代码中看到这一点。我认为这样做主要是为了实现代码的简洁性。

它通常在需要严格的布尔结果时使用 - 您可能会看到类似 !!(expression) 的内容。例如,在 jQuery 中搜索。

【讨论】:

  • 因为文件被压缩了,所以我通过代码美化器 (jsbeautifier.org) 将它替换为 !0 和 !1;我不确定为什么。我刚刚检查了原件,但该死的很难找到 :P 再次感谢大家!
  • 这实际上不会对代码性能造成影响吗?可能是一个微不足道的打击,但同样可以说将 4-5 个字节压缩为两个以减少 JS 的下载时间。
  • 这完全是微不足道的性能损失。查看jsperf.com/negated-0-vs-false,您会发现即使是最慢的浏览器也可以每秒评估超过 1.7 亿次。
  • 但是为什么要使用 !1 而不是 0? 0 会不会更短?
  • @Mike 是的,它会 但是它会是一个数字,而不是一个布尔值。
【解决方案2】:

这里的代码正在验证:

  • 在这些情况下不返回或不执行任何操作:"case 1", "case true", "case yes", "case y", "Case 1"
  • 当情况是:"case !0"返回"true"
  • 当上述情况均不满足时,默认返回“false”

【讨论】:

  • 这是错误的。对于第一个项目符号中的所有情况,除了 !0,此函数返回 true,否则返回 false。更不用说这个答案没有解决用户的问题。
【解决方案3】:

这似乎是一种特别愚蠢的返回truefalse的方式

【讨论】:

  • 2 字节 vs. 4(或 5 表示 false)。下载 Javascript 所需的带宽更少! :P
  • 我没想到这可能已经被缩小了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2013-01-15
  • 1970-01-01
相关资源
最近更新 更多