扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在JS中变量被分为基本类型变量和引用类型变量。
成都创新互联公司专注网站设计,以设计驱动企业价值的持续增长,网站,看似简单却每一个企业都需要——设计,看似简洁却是每一位设计师的心血 十载来,我们只专注做网站。认真对待每一个客户,我们不用口头的语言来吹擂我们的优秀,成百上千家的成功案例见证着我们的成长。
1、基本类型变量用八字节内存,存储基本数据类型(数值、布尔值、null和未定义)的值。
2、引用类型变量则只保存对对象、数组和函数等引用类型的值得引用(即内存地址)。
JS字符串的长度受到下标限制。理论最大长度是2^53-1(即js中可表达的最大安全整数)。
2^53是多大呢?大约9PB。根据统计,中国2014年所有出版物(不计复本)不到2000亿字,也就是400GB而已。
按此推算,不要说存一个txt了,中国自有甲骨文以来所有的书、各类出版物字数加在一起估计也不可能超过100TB,也就是0.1PB。
当然啦,实际引擎是不可能允许分配那么大的字符串的,你的电脑也没那么大存储不是。V8的heap上限只有2GB不到,允许分配的单个字符串大小上限更只有大约是512MB不到。JS字符串是UTF16编码保存,所以也就是2.68亿个字符。FF大约也是这个数字
最近项目有个需求要用js计算一串字符串写入到localStorage里所占的内存,众所周知的,js是使用Unicode编码的。而Unicode的实现有N种,其中用的最多的就是UTF-8和UTF-16。因此本文只对这两种编码进行讨论。
input id="wd" type="text" name=""
button id="btn"计 算/button
script type="text/javascript"
var btn = document.getElementById("btn");
btn.onclick=function(){
var str=document.getElementById("wd").value;
var bt=0;
for (var i = 0; i str.length; i++) {
var un = str.charCodeAt(i);
if (un=0 un=127) {
bt+=1;
}else if (un127 un=2048) {
bt+=2;
}else if (un2048 un=65536) {
bt+=3;
}else if (un65536 un=2097152) {
bt+=4;
}
}
alert(bt+"字节");
}
/script
根据Unicode 编码 来求字节数
码位为0 - 127之间的字符,是1个字节编码。
码位为128 – 2048之间的字符,编码为2个字节。
码位为2049 至 65536之间的字符,编码为3个字节。
码位为65537 至 2097152(但注意码位最大值是1114112)之间的字符,编码为4个字节
JS字符串的长度受到下标限制。理论最大长度是2^53-1(即js中可表达的最大安全整数)。2^53是多大呢?大约9PB。根据统计,中国2014年所有出版物(不计复本)不到2000亿字,也就是400GB而已。按此推算,不要说存一个txt了,中国自有甲骨文以来所有的书、各类出版物字数加在一起估计也不可能超过100TB,也就是0.1PB。当然啦,实际引擎是不可能允许分配那么大的字符串的,你的电脑也没那么大存储不是。V8的heap上限只有2GB不到,允许分配的单个字符串大小上限更只有大约是512MB不到。JS字符串是UTF16编码保存,所以也就是2.68亿个字符。FF大约也是这个数字。根据最长的网络小说是哪部,目前最长的网络小说大概2000万字。所以还是绰绰有余的。《道藏》大约7000万字,《大藏经》大约1亿字,也是存得下的。不过《永乐大典》有3.7亿字,《四库全书》有8亿字,V8/FF的一个字符串就存不下喽。然而IE11貌似可以存4GB的字符串,即21亿字。其实限制是在服务器资源、网速和存储。你文本还没读完,值还没赋完,内存不够了。内存够了,几百m几个G的变量,搞得页面请求超时了,访客没耐心关掉了,或者浏览器内存崩溃了。取一次吗?还是经常要用,要持久化不,数据库肯定存不下,文件存吧〔占硬盘,存不了几个〕,又每次要io读。你干嘛不搞几百字的简介,配个图,附上文件的下载地址〔放网盘,2T内免费〕不是很好吗。
按字符算的话,不管是字母、数字、符号,还是汉字,都是按一个字符算的,楼上说的“中文算俩字符长度”是错误的。
如果是按字节来算的话,则要根据页面的编码来定,比如
gb2312
,字母、数字、符号等算一个字节,汉字是两个字节;如果是utf-8,则汉字可能是2个、3个或4个字节(常见的是3个字节);如果是
utf-16
,则不管是字母、数字、符号,还是汉字,都是2个字节;等等。
一般来说英文是1个,中文是两个。但是会根据编码方式不同而不同。以下是搬运:
英文字母和中文汉字在不同字符集编码下的字节数
英文字母:
字节数 : 1;编码:GB2312
字节数 : 1;编码:GBK
字节数 : 1;编码:GB18030
字节数 : 1;编码:ISO-8859-1
字节数 : 1;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE
中文汉字:
字节数 : 2;编码:GB2312
字节数 : 2;编码:GBK
字节数 : 2;编码:GB18030
字节数 : 1;编码:ISO-8859-1
字节数 : 3;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流