JavaScript中null、undefined与字符串的内存分布及类型比较

作者:异步漫步

时间:2026-10-25

浏览:268

本文探讨JavaScript中null、undefined及字符串的内存存储机制,指出null虽属Object类型但存于栈中,字符串在JS中亦存于栈。通过NaN、undefined与null的相等性测试,解析类型比较规则,并提供判断undefined的函数实现及注意事项。

文章目录

JavaScript中null、undefined与字符串的内存分布及类型比较

代码如下:

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>探讨 null、undefined 与字符串的内存占用情况</title>
<style type="text/css">
body{font-size:12px;}
pre{padding:5px;border:solid 2px #dfdfdf;color:#fff; background-color:#666;}
</style>
</head>
<body>
<pre>
<strong>总结:</strong>
//需注意 null 虽属 Object 类型,但极为特殊,其本身存储于栈(stack)中。可将其视为 Object 的一种特殊形式。
//在其他面向对象语言中,字符串通常存储于堆(heap)中,但在 JavaScript 中,字符串存储于栈(stack)中。
//由此引发疑问:声明与定义的区别?思考后认为二者本质相同,仅为表述差异。当声明变量时,
//它是否位于栈中?即是否占用内存?(所有代码存在于代码段并占用内存,此处指未定义变量是否在栈中存在)
//经过思考,认为其存在。原因是 undefined 类型仅有一个值 undefined,当声明变量未初始化时,默认值为 undefined 的字面量。
//关于 null,它本应存在于堆中,但 JavaScript 的 ECMAScript 实现存在偏差,目前该做法已被标准接受,成为 Object 的占位符。
</pre>
<script language="javascript" type="text/javascript">
alert(NaN == NaN);//false
alert(undefined === undefined);//true
alert(undefined == null);//true,原因是 undefined 由 null 派生而来。
alert(typeof null);
alert(undefined === null); //false
//通过上述示例,可编写判断是否为 undefined 的函数如下
var isUndefined = function (param) {
return param === undefined;
}; 
//需注意 null 虽属 Object 类型,但极为特殊,其本身存储于栈(stack)中。可将其视为 Object 的一种特殊形式。
//在其他面向对象语言中,字符串通常存储于堆(heap)中,但在 JavaScript 中,字符串存储于栈(stack)中。
</script>
</body>
</html>

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章