银河国际游戏平台app Javascript系列25: 在 JS 中赢得字符串的 “位数”的几种材干

在 JavaScript 中赢得字符串的 “位数”(字符数)有多种材干,中枢分袂在于是否能正确科罚 Unicode 额外字符(如 emoji、疏远字)。
以下是正式默契和最好本质:
一、最常用:length 属性(基础场景)
语法
字符串.length
阐发
这是 JavaScript 原生提供的只读属性,不是材干,无需加括号
计数轨则:按UTF-16 代码单位统计,金沙JinSha(中国)娱乐网入口每个 BMP 平面(基本多道话平面)字符占 1 个代码单位
适用场景:仅包含 ASCII 字符、中语、日文、韩文等常见字符的字符串
示例
console.log("abc".length); // 3(英翰墨母)
console.log("你好全国".length); // 4(中语)
console.log("123456".length); // 6(数字)
console.log("a1b2c3".length); // 6(夹杂)

二、⚠️ 致命坑点:length 对额外字符计数异常
length 无法正确识别占 2 个 UTF-16 代码单位的字符,银河国际游戏平台app会导致计数翻倍:
Emoji 色彩(如、❤️、)
疏远汉字(如、、)
额外象征(如、)
异常示例
console.log("".length); // 2(内容1个字符)
console.log("❤️".length); // 4(内容2个字符)
console.log("".length); // 2(内容1个疏远字)
console.log("ab".length); // 4(内容3个字符)

三、正确赢得所有字符数(含额外字符)
材干 1:ES6 推广运算符 [...str].length(保举)
运用 ES6 的迭代器特质,能正确拆分 Unicode 字符,性能优秀且写法松懈。
console.log([...""].length); // 1(正确)
console.log([..."❤️"].length); // 2(正确)
NBA篮球投注app官网下载console.log([..."ab"].length); // 3(正确)
console.log([...""].length); // 3(正确)
材干 2:Array.from(str).length(兼容性更好)
功能与推广运算符十足一致,对旧环境的兼容性略好(需 ES6 救援)。
console.log(Array.from("").length); // 3
console.log(Array.from("你好全国").length); // 5
材干 3:正则抒发式 /./u 匹配(备用)
使用带u美艳的正则抒发式匹配所有 Unicode 字符,再统计数目。
function getCharCount(str) {
return (str.match(/./gu) 银河国际游戏平台app