JS中的基本类型和引用类型

1、数据类型

    1.1 基本数据类型:null、undefined、string、number、boolean、Symbol(ES6)。

    1.2 引用数据类型:Object(JS中除了基本数据类型以外都是对象)。引用类型有以下几种:object、Array、Function、Date、RegExp、特殊的基本包装类型(StringNumberBoolean)以及单体内置对象(Global、Math)。

    1.3 区别:基本类型的值是不可变的,引用类型的值是可变的。

         1.3.1 基本类型:当一个变量赋值给另一个变量时,会在内存中创建一个新值,而不是两个变量共用一个值。基本数据类型存放在栈中。

var a=10;
var b=a;
console.log(a);//10
console.log(b);//10
b=20;
console.log(a);//10
console.log(b);//20

                                 

此时:a中保存的值为10,使用a来初始化b时,b从a那里复制一个副本,此时a与b相互独立,这两个变量可以参加任何操作而相互不受影响。

      1.3.2 引用类型:当a变量向b变量赋值引用类型时,会在栈中创建一个b变量,然后将a中存储的内容(a指向的对象的地址)赋值给b,此时b和a中存储的都是同一份地址。两个变量共享一个对象,其中一个变量操作该对象时,两外一个变量也会受影响。

var a=[1,2,3];
var b=a;
a.push(4);
console.log(a);   // [1,2,3,4]
console.log(b);   // [1,2,3,4]

var a=[1,2,3];
var b=a;
b=[1,2,3,4];
console.log(a);  // [1,2,3]
console.log(b);  // [1,2,3,4]

                                                   

因此,引用类型的赋值其实是对象保存在栈区地址指针的赋值,因此两个变量指向同一个对象,任何的操作都会相互影响。

 

2.基本类型和引用类型的比较

    2.1 基本类型的比较:只要它们的值相等就相等。

注意以下情况:

var a=1;
var b=true;
console.log(a==b); //true
console.log(a===b);//false  比较值和类型

使用==的时候,JS会自动进行类型转换,然后比较值。

    2.2 引用类型的比较:引用的比较
 

var person1='{}';
var person2='{}';
console.log(person1===person2);  //true

var person1={};
var person2={};
console.log(person1===person2);  //false   p1和p2为两个独立的对象,内存地址不同,所以值不同

 

3.基本类型只保存在栈中,引用类型同时保存在栈中和堆中

                          

对于基本类型,直接保存在栈中。对于引用类型,栈中保存变量的标识和指向对象的指针(堆中的地址),堆中存储实际的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值