基本类型值:指的是保存在栈内存中的简单数据段;
引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针执行内存中的另外一个位置,由该位置保存对象;工具
基本类型值:按值访问,操做的是他们实际保存的值;
引用类型值:按引用访问,当查询时,咱们须要先从栈中读取内存地址,而后再顺藤摸瓜地找到保存在堆内存中的值;引用类型的值保存在内存中,因为js不容许直接访问内存,在操做的时候,其实操做的是对象的引用spa
基本类型:undefined、null、Boolean、String、Number
引用类型:Function、Object、Array指针
基本类型变量的复制:从一个变量向另外一个变量复制时,会在栈中建立一个新值,而后把值复制到为新变量分配的位置上;code
引用类型变量的复制:复制的是存储在栈的指针,将指针复制到为新变量分配的位置上,而这个指针副本与原指针执行的是存储在堆中的对象。复制结束后,两个变量指向的是同一个对象,所以操做其中的任何一个将会影响另外一个;对象
typeof操做符是检测基本类型的最佳工具图片
若是变量值是null或者对象,返回的是object内存
typeof null // "object" typeof undefined // "undefined" typeof 1 // "number" typeof "1" // "string" typeof true // "boolean" typeof {} // "object" typeof [] // "object" typeof function() {} // "function"
instanceof操做符用于检测引用类型,能够检测它究竟是什么类型的实例string
若是变量是给定引用类型的实例,instanceof将会返回trueit
console.log(objects instanceof Object) // objects是不是Object的实例 console.log(arrays instanceof Array) // arrays是不是Array的实例
经过如下两个例子解释值传递与引用类型传递:io
var a = 1; function add(b) { b += 1; } add(a); console.log(a); // a == 1,a的值没有发生变化
值传递的特性:
1.只将值进行传递,与原变量无关,值会被复制一份,保存在内存中另外一个不一样的位置;
2.当咱们修改传递后的值时,修改的是内存中新的位置,而原变量不会被影响,仍是原来的值;
3.这种状况每每出如今基本类型变量中;
var a = [1]; function add(b) { b.push(2); } add(a); console.log(a); // [1,2] 说明原始的a的值已经被改变了
引用传递的特性:
1.将内存地址进行传递,至关于把原变量完整的传递过来;2.当咱们修改传递后的值时,修改的是内存中原来的位置,会对原变量形成影响;3.这种状况每每出如今对象中;