有一个问题困扰着我,那就是在JavaScript中不同的数据类型占用多少内存。例如,在C++中,int、char和float等数据类型使用2、1和8字节的内存顺序。那么在JavaScript中,Number、String、Boolean、Null、Undefined以及对象和数组等数据类型占用多少内存,以及被接受的范围是什么呢?请原谅我的英文水平低!
有一个问题困扰着我,那就是在JavaScript中不同的数据类型占用多少内存。例如,在C++中,int、char和float等数据类型使用2、1和8字节的内存顺序。那么在JavaScript中,Number、String、Boolean、Null、Undefined以及对象和数组等数据类型占用多少内存,以及被接受的范围是什么呢?请原谅我的英文水平低!
数字占用8个字节。
在这个w3schools页面找到了这个信息。
我再搜索了一些其他JavaScript原始类型的信息,但是惊讶的发现很难找到!不过我找到了下面的代码:
...
if ( typeof value === 'boolean' ) {
bytes += 4;
}
else if ( typeof value === 'string' ) {
bytes += value.length * 2;
}
else if ( typeof value === 'number' ) {
bytes += 8;
}
...
似乎表明一个字符串每个字符占2个字节,而布尔值占4个字节。
在这里找到了这段代码和这里。完整的代码实际上是用来获取对象的大致大小。
虽然在进一步阅读时,我发现了这个有趣的代码,它来自于konijn 在这个页面: 计算字符串的字节长度。
function getByteCount( s )
{
var count = 0, stringLength = s.length, i;
s = String( s || "" );
for( i = 0 ; i < stringLength ; i++ )
{
var partCount = encodeURI( s[i] ).split("%").length;
count += partCount==1?1:partCount-1;
}
return count;
}
getByteCount("i♥js"); // 6 bytes
getByteCount("abcd"); // 4 bytes
看起来字符串在内存中的大小取决于字符本身。虽然我仍在试图弄清楚为什么他把计数设置为1,如果是1,否则他在for循环中使用count-1
。
如果我发现其他任何内容,将更新帖子。
根据ECMAScript标准,只有一种数字类型:双精度64位二进制格式IEEE 754值。
因此应该为8个字节。
JavaScript的字符串类型用于表示文本数据。它是由16位无符号整数值的“元素”组成的集合。
因此每个字符应该为2个字节。
布尔值表示逻辑实体,只能有两个值:true和false。
没有更多关于它的内容了。
一个值的内存表示,也就是它的大小,除非另有规定,否则是一个实现细节,并且可以根据运行环境的底层代码而不同。运行时是运行JavaScript代码的应用程序,例如Nodejs、Firefox浏览器或Chrome浏览器。
假设你正在编写自己的运行时,并且想要表示一个布尔值。布尔值至少需要一个位,因此您可以将其存储在内存中作为单个位。
这是正确的:
■
这是错误的:
□
但是没有什么可以阻止您使用8位或一个字节的内存空间。这里最高有效位保存值,其余位将用0填充:
□□□□□□□■
或者64位:
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■
é
、\u00E9
和\u{E9}
都创建了带有重音符号的字母e。在JavaScript字符串中,您可以优先选择其中的任何一个。