数据类型

类型分类

简单类型又叫基本数据类型或者值类型,复杂类型又叫引用类型。
值类型:在存储时变量中存储的是值本身,因此叫做值类型。String、number、boolean、undefined、null。
引用类型:在存储时变量中存储的仅仅是地址(引用),可以通过new关键字构造的实例,如Object、Array、Function。

判断类型

  1. typeof 返回类型字符串
    可以判断:undefined / 数值 / 字符串 / 布尔值 / Function
    不能判断:null与object object与array
  2. instanceof:
    可以判断对象的具体类型 (函数和数组是特别的对象)
  3. ===
    可以判断:undefined,null

undefined和null的区别

undefined:代表定义未赋值
null:定义并赋值,只是值为null

注意:当变量赋值为null时,第一种,初始化赋值,表明将要赋值为对象。第二种,让对象成为垃圾对象(被垃圾回收器回收)

堆和栈

简单数据类型存放在栈里面直接存放值。
复杂数据类型的变量存放在栈,栈中存放引用地址(堆地址)。而值存放在堆中。


变量类型的存储方式

简单数据类型传参

//调用函数相当于将实参赋值给形参 
var num = 10;
var num = 20;
console.log(num);//结果为20

var num1 = 30;
function add(times) {//times = num1
     times = times*10
     console.log(times);//结果300
}
add(num1); 
console.log(num1);//结果30

首先我们声明了一个变量num并为他在栈中开辟了一个空间存放10,然后num=20则将空间的值改为20, 而num1在栈中开辟一个存放30的空间,而timers复制了num1的值并在栈中开辟一个空间,所以函数中不会影响到num1的值

复杂数据类型传参

function Person(name) {
    this.name = name;
}
function f1(x) { //x = p
    console.log(x.name);//张学友
    x.name = '黎明';
    console.log(x.name);//黎明
}
var p = new Person('张学友');
console.log(p.name);//结果张学友
f1(p);
console.log(p.name);//黎明

var p = new Person('张学友');在栈中开辟了一个p的空间存放地址,new Person('张学友');在堆中存放。f1(p) 中x复制了一份p的空间所以x存放的是指向上面new Person('张学友');的地址, x和p指向同一个堆空间地址。所以最后输出的是console.log(p.name);//黎明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容