gpt4 book ai didi

javascript - 使用 + 和 | 的区别JavaScript 中的运算符?

转载 作者:行者123 更新时间:2023-11-30 07:16:27 25 4
gpt4 key购买 nike

我正在研究 AngularJS 框架。我发现他们使用 | 运算符来添加东西。使用 + 运算符和 | 运算符有什么区别?

与性能有关吗?如果是怎么办?

这是请求的代码:-

var manualLowercase = function(s) {
return isString(s)
? s.replace(/[A-Z]/g, function(ch) {
return String.fromCharCode(ch.charCodeAt(0) | 32);
}): s;
};

最佳答案

它们是不同的运算符。

在哪里xy是数字2, x | ybit-wise orx + y是加法。对于 x一些值和 y他们将得到相同的结果 - 对于其他一切,结果将不同3

无论如何,使用表示想要的形式1。除非有性能案例,否则不要担心性能 - jsperf是一个方便的工具。然后意识到微基准测试本身就存在偏差,它usually doesn't matter .


1 对于这个特殊问题,请注意正则表达式匹配每个 A-Z 字符并将其替换为函数的结果。

因此我们知道charCodeAt(0)是 A..Z 的字符代码。看着 character table我们可以看到这些值在 [0x41, 0x5a] 范围内,请注意 [0x61, 0x7a] 是相应的小写字母。因此,我们可以通过向大写字母的字符代码添加 0x20(或 32)来进行 { A, B .. Z } -> { a, b .. z }。

还可以观察到,将 32(或 1 << 5)加到没有设置第 5 位的数字(例如 [0x41, 0x5a] 范围内的数字)可以通过以下方式实现按位或 1 << 5(即 x| 32).这就是为什么 |+可在此处互换。添加 32(即 x + 0x20)可以说更清楚,即使两个运算符在上述规则下的行为相同。

无论如何,如果对这两种方法的性能影响感到好奇,请在相关/目标环境中完整地(和在上下文中)对代码进行基准测试。 p>


2 运营商x | y 总是是按位或(通过 [ToInt] 转换),但是 x + y 可能是一个字符串连接。

3 只有当 x 时,结果才会相同和 y都是数字(或者更确切地说,都不是字符串),可以通过 [ToInt] 转换, 没有共同的设置位,并且在大约 [0, 2^32) 左右的范围内。

关于javascript - 使用 + 和 | 的区别JavaScript 中的运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15307667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com