2

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

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

两种访问方式:

基本类型值:按值访问,操作的是他们实际保存的值;
引用类型值:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;引用类型的值保存在内存中,由于js不允许直接访问内存,在操作的时候,其实操作的是对象的引用

两种数据类型:

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

图片描述

两种类型复制

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

图片描述

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

图片描述

两种变量类型检测

  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操作符用于检测引用类型,可以检测它到底是什么类型的实例

  2. 如果变量是给定引用类型的实例,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.这种情况往往出现在对象中;


wangshikun
314 声望16 粉丝

网站:[链接]