这篇文章主要 解决的问题 为: 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" }。我们无法直接访问和操作堆中的数据,只能通过一个指针间接的对引用类型的数据进行操作。


holyZhengs
864 声望80 粉丝

起于青萍之末,止于草莽之间。