JavaScript基本类型和引用类型
还是那句话,只有自己能给别人讲清楚地东西,只有自己做出来的东西,只有自己亲自写出的来的东西才是自己掌握的东西! —随笔!
1:JavaScript变量分哪几种?他们各自的特点?
- JavaScript的变量分为两种不同类型的值:基本类型和引用类型;
- 基本类型就是前面我们讨论的5中基本数据类型:undefined、null、boolean、number、string。这5种基本数据类型是按照他们的值进行访问的,(即我们在写程序的时候,其实操作的是变量中实际的值);
- 而引用类型就是保存在内存中的对象。但是JavaScript和其他语言不同的是,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。好好,不迷惑人了,我还是说人话吧,简而言之,我们在编程操作js对象的时候,是按照引用访问的,即操作的是对象的引用(又称指针),而不是它本身。
2:引用类型和基本类型的区别在哪?
2.1:引用类型有动态的属性,而基本类型没有这样的属性;
2.1.1:对于引用类型 来说,例如:
var person = new Object();
person.name = 'bangbang';
console.log(person.name); //bangbang;
以上的代码创建了一个person对象,并且把name的属性添加给了person,如果这个对象不被销毁,这个属性就一直存在。
2.1.2:对于基本类型 来说,我们不能给基本类型添加属性,例如:
var name = 'bangbang';
name.age = 18;
console.log(name.age); //undefined
看了上面的总结,你肯明白了,至少在动态属性上,他们是不一样的。
2.2: 基本类型复制变量和引用类型是截然不同的;
2.2.1对于基本类型来说,如果从一个变量向另一个复制值得时候,会在变量对象上创建一个新的值,然后把该值复制到 给新变量分配的位置上。例子如下:
var num1 = 1;
var num2 = num1;
num2 = 5;
console.log(num1); //1
由此可见,num1和num2是相互独立的,他们互不影响。
这是复制以前的num1
num1 | 1 |
这是复制以后的num1
num1 | 1 |
num2 | 1 |
嘿嘿!图画出来,总可以理解了吧!
2.2.2:但是引用复制可并没有那么的单纯,可怜你们这些小司机们。。。现在跟着老司机来给你们说说吧!
一个变量向另一个变量复制引用类型的时候,同样也会将存在在变量对象的值复制一份放到给新生命分配的空间中,注意:不同的是,这个值得副本实际上是一个指针,改变新生命就会对它的父母产生影响,就是对被复制的变量产生影响!
var obj1 = new Object();
obj1.name = 'bangbang';
var obj2 = obj1;
obj2.name = 'yanniu';
console.log(obj1); //yanniu
变了吧!这就是所谓的不同之处!,引用类型复制的时候,其实操作的是指针,也就是说,我们无论怎么操作,我们操作的还是他们共同指向的同一个值!