JavaScript中null、undefined与字符串的内存分布及类型比较
作者:异步漫步时间:2026-10-25 09:37:07浏览:269
本文探讨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>作者最新文章
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
