JavaScript中的字符串是一组字符,每个字符都有16位的整数。每个字符串在内存中存储数据,因为我们没有像C语言中的sizeof那样的直接方法。
然而,我们可以通过多种方式来找到字符串的字节数大小
- 使用nodejs的缓冲区对象
- 使用Blob对象
- TextEncoder编码器方法
- unescape方法
我们来声明一下输入字符串
var str="a";
var str1="ab";
var str2="aabc";
var str3="🙂";
var str4="👍🙂";
输入一个字符,返回1个字节的字符,如 "ab "返回2个字节,但是emojis每个符号返回4个字节,两个emojis返回8个字节。
表情符号是UTF编码的字符串,用4个字节来表示一个字符。
上述输入的输出是
1
2
4
4
6
使用nodejs的缓冲区对象
缓冲区是NodeJS编程中的一个内置对象,用于表示固定字节。
它支持最新的浏览器并广泛用于JavaScript框架。它在服务器端工作
Buffer的byteLength方法以字节为单位返回编码的字符串大小。
下面是一个语法
Buffer.byteLength(String, encoding)
String - 字符串原始数据编码 - UTF-8 或 UTF-16
它返回字符串的字节数
console.log(Buffer.byteLength(str, 'utf8'));
console.log(Buffer.byteLength(str1, 'utf8'));
console.log(Buffer.byteLength(str2, 'utf8'));
console.log(Buffer.byteLength(str3, 'utf8'));
console.log(Buffer.byteLength(str4, 'utf8'));
用Blob对象来计算字符串的字节数大小
Blob是一个内置的javascript对象,用于获取任何类型文件的二进制数据。该文件可以是图片,也可以是文本字符串。
Blob.size返回一个字符串的大小。
console.log(new Blob([str]).size);
console.log(new Blob([str1]).size);
console.log(new Blob([str2]).size);
console.log(new Blob([str3]).size);
console.log(new Blob([str4]).size);
TextEncoder 编码功能
TextEncoder是webworkers中使用的一个javascript,用于返回以字节为单位的字符串encode 方法返回编码后的对象,长度以字节为单位返回。
console.log(new TextEncoder().encode(str).length);
console.log(new TextEncoder().encode(str1).length);
console.log(new TextEncoder().encode(str2).length);
console.log(new TextEncoder().encode(str3).length);
console.log(new TextEncoder().encode(str4).length);
unescape长度方法
unescape是一个即将被废弃的对象,它将被用来对字符串进行编码。
然而,unescape 对象的length 方法可以以字节为单位返回搅拌的数据。
console.log(unescape(encodeURIComponent(str)).length);
console.log(unescape(encodeURIComponent(str1)).length);
console.log(unescape(encodeURIComponent(str2)).length);
console.log(unescape(encodeURIComponent(str3)).length);
console.log(unescape(encodeURIComponent(str4)).length);
结语
总而言之,在这篇文章中记录了几种方法来返回字节数的字符串大小。你可以根据你的需要选择合适的方法。