js 查看字符串字节数
今天遇到个需求,需要在后端编辑前端底部显示的文字,比如关于我们,和电话等。但是这些文字或数字有长度限制,太长就会导致页面变形。但是具体限制多大,得根据前端页面,还得看文字内容是什么。
汉字是 2 字节,数字和字母是 1 字节。大概占的大小也是 2 :1。
这就需要获取字符串字节数。
new Blob(["雨南"]).size
但这个获取的字节数是 3,因为 JavaScript 通常会使用UTF-8编码,这是一种多字节编码方式,其中英文字符通常占用1个字节,而中文字符可以占用3个字节或更多。
因为JavaScript原生并不支持GBK编码,所以可以用第三方库获取 gbk 编码字节。
npm install iconv-lite
function estimateObjectSize(obj) {let size = 0;for (const key in obj) {if (obj.hasOwnProperty(key)) {size += key.length * 2; // 属性名通常占用2字节的内存(假设为UTF-16编码)if (typeof obj[key] === 'string') {size += obj[key].length * 2; // 字符串占用2字节/字符(UTF-16编码)} else if (typeof obj[key] === 'number') {size += 8; // 数字通常占用8字节的内存(双精度浮点数)} else if (typeof obj[key] === 'object' && obj[key] !== null) {// 对于嵌套对象,这里可以递归调用estimateObjectSize或者简单地增加一个固定值来近似表示复杂对象的大小size += 4; // 示例:为嵌套对象增加4字节的内存占用(近似值)} else {// 其他类型可以根据需要添加大小估算逻辑}}}return size;
}const obj = { key: "value", number: 123 };
console.log(`估计对象大小(字节): ${estimateObjectSize(obj)}`);
也可手动计算简单对象的大小(近似)
function estimateObjectSize(obj) {let size = 0;for (const key in obj) {if (obj.hasOwnProperty(key)) {size += key.length * 2; // 属性名通常占用2字节的内存(假设为UTF-16编码)if (typeof obj[key] === 'string') {size += obj[key].length * 2; // 字符串占用2字节/字符(UTF-16编码)} else if (typeof obj[key] === 'number') {size += 8; // 数字通常占用8字节的内存(双精度浮点数)} else if (typeof obj[key] === 'object' && obj[key] !== null) {// 对于嵌套对象,这里可以递归调用estimateObjectSize或者简单地增加一个固定值来近似表示复杂对象的大小size += 4; // 示例:为嵌套对象增加4字节的内存占用(近似值)} else {// 其他类型可以根据需要添加大小估算逻辑}}}return size;
}const obj = { key: "value", number: 123 };
console.log(`估计对象大小(字节): ${estimateObjectSize(obj)}`);
其实还有一个办法,不设置限制长度,超出长度时前端截断,这样用户就会知道超出长度了。