两种类型:基本类型值、引用类型值
基本类型值:指的是保存在栈内存中的简单数据段;
引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象;
两种访问方式:
基本类型值:按值访问,操作的是他们实际保存的值;
引用类型值:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;引用类型的值保存在内存中,由于js不允许直接访问内存,在操作的时候,其实操作的是对象的引用
两种数据类型:
基本类型:undefined、null、Boolean、String、Number
引用类型:Function、Object、Array
两种类型复制
基本类型变量的复制:从一个变量向另一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上;
引用类型变量的复制:复制的是存储在栈的指针,将指针复制到为新变量分配的位置上,而这个指针副本与原指针执行的是存储在堆中的对象。复制结束后,两个变量指向的是同一个对象,因此操作其中的任何一个将会影响另一个;
两种变量类型检测
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操作符用于检测引用类型,可以检测它到底是什么类型的实例
如果变量是给定引用类型的实例,instanceof将会返回true
console.log(objects instanceof Object) // objects是否是Object的实例
console.log(arrays instanceof Array) // arrays是否是Array的实例
两种变量类型传递(值传递、引用类型传递)
通过以下两个例子解释值传递与引用类型传递:
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.这种情况往往出现在对象中;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。