1.8.1 String 里的方法
1. toLowerCase()
和 toUpperCase()
toLowerCase()
和 toUpperCase()
1.1 原理
UniCode 编码
两个方法
str.charCodeAt(index)
取单个字符,得到它的编码String.fromCharCode(num)
将编码转换成字符

上图是基础拉丁语,范围是 0000−007F
,共 128 个字符。
1.2 实现
function to(str, min, max, dist){
let arr = str.split('');
for(let i in arr){
let cur = arr[i].charCodeAt();
if(cur >= min && cur <= max) arr[i] = String.fromCharCode(cur + dist);
}
return arr.join('');
}
const toLowerCase = function(str){
const A = 'A'.charCodeAt();
const Z = 'Z'.charCodeAt();
return to(str, A, Z, 32);
}
const toUpperCase = function(str){
const a = 'a'.charCodeAt();
const z = 'z'.charCodeAt();
return to(str, a, z, -32);
}
1.3 扩展阅读
2. 用下标取单字符信息
2.1 charAt(i)
vs [i]
charAt(i)
vs [i]
不同点:
兼容性
charAt()
ECMAScript 3,IE7 和 IE6 也支持[]
ECMAScript 5,IE7 和 IE6 不支持
边界不同
非数值类型,是否进行类型转换
超过有效范围时
https://stackoverflow.com/questions/5943726/string-charatx-or-stringx
2.2 charAt(i)
vs at(i)
charAt(i)
vs at(i)
都返回字符(串),由指定位置的 the single UTF-16 code unit 组成的。
不同点:下标
str.charAt(i)
下标范围[0, str.length-1]
,且会自动进行 Number 类型转换str.at(i)
下标支持负数
2.3 charCodeAt()
vs codePointAt(i)
charCodeAt()
vs codePointAt(i)
不同点:对于值大于 0xFFFF
的 code point,它不能被单个 UTF-16 code unit 表示
str.charCodeAt(i)
,返回整数,范围在
[0, 65535]
,表示指定位置的 UTF-16 code unit注意:如果 Unicode code point 不,那么此方法只会返回 code point 的一部分(比如 )如果想要整个 code point 的值,可以使用
codePointAt()
str.codePointAt(i)
Last updated