我在 AngularJS 源代码中找到了以下代码,但不知道它是如何工作的:
"this is it.".replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
将输出这就是它。
我特别不明白 ch.charCodeAt(0) & ~32
部分以及它如何生成大写字母。谁能给我解释一下其中的逻辑吗?
完整代码
var manualUppercase = function(s) {
return isString(s)
? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
: s;
};
最佳答案
表达式~32
采用值32并翻转每一位,给出如下的位模式:11011111
。
大写字母的 ASCII 值从值 65 开始,而小写字母的 ASCII 值从 97 开始。区别在于位 5 或 32。
因此,如果您使用 a
和 ~32
执行按位 AND,则第 5 位将被清除,结果将为 A
.
注意:这仅适用于 ASCII 字母字符。对于超出该范围的 UTF-8,它会严重失败。
关于javascript - 手动大写/小写解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149928/