基本数据类型和引用数据类型
基本数据类型:number,String,Boolean,null,undefined
引用数据类型:object,array,function
基本数据类型和引用数据类型的区别
1:值是否可变
.基本类型的值是不可变得:
.引用类型的值是可变的
2:数据的比较
.基本类型的比较是值的比较—只有在它们的值相等的时候它们才相等
如果他们的类型不相等;在进行比较的过程中;== 就进项了数据类型的转化。转化为相等的类型;在进行值的比较;也就是为什么==只比较值;不比较类型的原因;===比较类型和值、
引用类型的比较是引用的比较。比较是在堆中的数据,也就是说;即使是两个一样的对象。返回也是false ;是因为在堆中地址不同。
3:在内存中储蓄不同
基本类型的变量是存放在栈区的(栈区指内存里的栈内存),栈区包括了 变量的标识符和变量的值。
引用类型的值是同时保存在栈内存和堆内存中的对象
4:赋值时候区别
在从一个变量向另一个变量赋值基本类型时,会在该变量上创建一个新值,然后再把该值复制到为新变量分配的位置上:
这两个变量可以参加任何操作而相互不受影响。
a中保存的值为 10 ,当使用 a 来初始化 b 时,b 中保存的值也为10,但b中的10与a中的是完全独立的,该值只是a中的值的一个副本,此后
对象的引用
当从一个变量向另一个变量赋值引用类型的值时,同样也会将存储在变量中的对象的值复制一份放到为新变量分配的空间中。前面讲引用类型的时候提到,保存在变量中的是对象在堆内存中的地址,所以,与简单赋值不同,这个值的副本实际上是一个指针,而这个指针指向存储在堆内存的一个对象。那么赋值操作后,
两个变量都保存了同一个对象地址,则这两个变量指向了同一个对象。因此,改变其中任何一个变量,都会相互影响:
例:
<script>
//基本类型
var a = 'zhang';
var arr = [1,2,3,4];
arr.push(3)
//数据比较
var bool= true;
console.log(a == bool);
//赋值
/*var a = 1;
var b = a;
b = 10;*/
var a = {};//a保存了一个空对象的实例
var b = a;//a和b都指向了这个空对象
a.name = '张';
console.log(b.name);
b.age = 22;
console.log(a);
console.log(a==b);//true
</script>
他们的关系图:
总结:引用类型的赋值其实是对象保存在栈区地址指针的赋值,因此两个变量指向同一个对象,任何的操作都会相互影响。
数据类型的判断总结
typeof 判断一个变量的数据类型,返回一个字符串
typeof一般用来判断值类型(数字型字面量,字符串的字面量,布尔字面量)
注意:使用typeof判断数据类型时,发现对象,数组, nul