Javascript中的基础类型与引用类型

两种类型:基本类型值、引用类型值

基本类型值:指的是保存在栈内存中的简单数据段;
引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针执行内存中的另外一个位置,由该位置保存对象;工具

两种访问方式:

基本类型值:按值访问,操做的是他们实际保存的值;
引用类型值:按引用访问,当查询时,咱们须要先从栈中读取内存地址,而后再顺藤摸瓜地找到保存在堆内存中的值;引用类型的值保存在内存中,因为js不容许直接访问内存,在操做的时候,其实操做的是对象的引用spa

两种数据类型:

基本类型:undefined、null、Boolean、String、Number
引用类型:Function、Object、Array指针

图片描述

两种类型复制

基本类型变量的复制:从一个变量向另外一个变量复制时,会在栈中建立一个新值,而后把值复制到为新变量分配的位置上;code

图片描述

引用类型变量的复制:复制的是存储在栈的指针,将指针复制到为新变量分配的位置上,而这个指针副本与原指针执行的是存储在堆中的对象。复制结束后,两个变量指向的是同一个对象,所以操做其中的任何一个将会影响另外一个;对象

图片描述

两种变量类型检测

  1. typeof操做符是检测基本类型的最佳工具图片

  2. 若是变量值是null或者对象,返回的是object内存

typeof null                 // "object"
typeof undefined            // "undefined"
typeof 1                    // "number"
typeof "1"                  // "string"
typeof true                 // "boolean"
typeof {}                   // "object"
typeof []                   // "object"
typeof function() {}        // "function"
  1. instanceof操做符用于检测引用类型,能够检测它究竟是什么类型的实例string

  2. 若是变量是给定引用类型的实例,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.这种状况每每出如今对象中;

相关文章
相关标签/搜索