这篇文章主要 解决的问题 为: js的基本类型有那些?引用类型有哪些? 基本类型和引用类型有什么区别?null和undefined的区别? 哪一个存在堆上面,哪一个存在栈上面。
JavaScript有5种基本类型:undefined null boolean string number
五种按值访问的类型
var a; // undefined表示变量声明了,却没有赋值
var a=null; // null表示空值
var a="字符串"; // string字符串
var a=false; // boolean布尔值包括true,false
var a=1; // number,可以是整数和小数
var a=NaN // 非数字
4种引用类型:Object Array Data RegExp
var a=[1,2,3]; // Array
var a=new Date(); // Date
var a={}; // Object
Null和Undefined的区别:
null
:
- 是一个空对象,同时也是js保留的关键字,用来定义一个空值。
- 在数值运算中自动转化为0,转为Boolean时为false。
typeof null;
"object"
undefined
:
- 是全局对象的一个特殊属性,代表一个未确定的值
- 变量被声明的但未赋值的时候为undefined;函数没有返回值时,返回undefined
- 参与运算的时候,结果为NAN,转为Boolean时为false
"undefined" in window
ture
哪一个存在栈上?哪一个存在堆上?
简单的说一下:
栈 会自动分配内存空间,由系统自动释放。
堆 时动态分配的内存,大小不确定,不会自动释放,而且不允许直接访问。
基本类型
: 存放在栈中,其大小确定,内存空间自动分配。引用类型
: 存放在堆中,如数组等,它们大小不确定,不固定。
举个栗子
var a = 1;
var b = 2;
var obj = { name = "holy" };
我们来看一下在内存中是如何存储的
可以看到基本类型 a 和 b
变量名和相应的值都是存储在 栈
中的,而引用类型 obj
在栈中存储的是一个地址,这个地址指向 堆
中的一个位置,该位置存放的就是obj实际的值 { name = "holy" }。我们无法直接访问和操作堆中的数据,只能通过一个指针间接的对引用类型的数据进行操作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。