在 JavaScript 中返回 !1

IT技术 javascript function return
2021-03-17 17:36:16

我刚刚在 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
    }
}

提前致谢!

3个回答

立即回答您的问题:

  • return !1 相当于 return false
  • return !0 相当于 return true

在规范 - 11.4.9 逻辑非运算符- 它指出,当您!在前面放置感叹号时,结果被评估为布尔值并返回相反的结果。

示例

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 优化器传递的代码中看到这一点我认为这样做主要是为了实现代码的简洁性。

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

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

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

2 字节 vs. 4(或 5 表示假)。下载Javascript所需的带宽更少!:P
2021-05-14 17:36:16
我没有考虑过这可能已经通过了缩小。
2021-05-16 17:36:16

这里的代码正在验证:

  • 在这些情况下不返回或不做任何事情: "case 1", "case true", "case yes", "case y", "Case 1"
  • 当情况是:"case !0"返回"true"
  • 当默认情况下不满足上述任何一种情况时,它返回“false”
这是错误的。除了 !0 之外,此函数对第一个项目符号中的所有情况返回 true,否则返回 false。更不用说这个答案没有解决用户的问题。
2021-04-20 17:36:16