JavaScript 入门(三、JavaScript 基本数据类型和引用数据类型详解)

一、常见的基本数据类型:number、boolean、string、undefined、 null

1、.基本类型的变量是存放在栈内存的。不拥有属性和方法,访问是按值访问的,基本类型的值是不可变得
例如:

var a = 1;
var b = a;
console.log(a == b);//true
console.log(a === b);//true

改变a的值

a = 2;
console.log(a == b);//false
console.log(a === b);//false

一旦改变a将不再等于b

2、基本类型的复制就是在栈内存中开辟出了一个新的存储区域用来存储新的变量,这个变量有它自己的值,只不过和前面的值一样,所以如果其中一个的值改变,则不会影响到另一个。

例如:

var $a = 'hello';
var $b = $a;
console.log($a);//hello
console.log($b);//hello

改变a的值

$a = 'world';
console.log($a);//world
console.log($b);//hello

二、常见的引用类型:array、object、function…
1、引用类型的值是保存在堆内存中的,引用类型值是可变的
例如

 var obj = {}; // obj保存了一个空对象的实例
var $obj = obj;  // obj和$obj都指向了这个空对象
console.log(obj== $obj);// true
console.log(obj=== $obj);// true

分别改变obj和$obj

obj .name = 'xiaoming';
console.log(obj .name); // 'xiaoming'
console.log($obj .name); // 'xiaoming'

$obj.age = 18;
console.log($obj.age);// 18
console.log(obj.age);// 18

console.log(obj== $obj);// true
console.log(obj=== $obj);// true

obj依旧等于$obj

总结:上述obj,$obj为对象。是引用类型。a保存的只是指向它在堆内存中地址的指针,它的副本b也是指向同一个堆内存的地址的指针。所以它们改变的是同一个指向堆内存中的对象。

深拷贝和浅拷贝

在引用类型中,a赋值给b,即相当于a复制了一份给b,但它们实际上都是操作同一个堆内存中的对象,这种拷贝称为浅拷贝。如果要使a,b互不影响,那么这种复制称为深拷贝,欲了解请看深拷贝与浅拷贝篇。

你可能感兴趣的:(JavaScript 入门(三、JavaScript 基本数据类型和引用数据类型详解))