乐趣区

关于javascript:基本类型和引用类型的值

在 js 中变量存在着两种数据类型的值,一种是根本类型值,一种是援用类型值。

1. 根本类型值

咱们常说的根本类型值包含String,Number,Boolean,Undefined,Null, 这 5 种根本数据类型。

通常是通过栈的存储构造进行存储,存储的模式较为简单

变量
a ‘hello’
b 1

当咱们别离定义了一个变量 a 与变量 b,将变量 a 赋值给变量 b 毋庸置疑,此时变量 b 的值将会扭转。

变量
a ‘hello’
b ‘hello’

此时我扭转变量 a 的值 b 的值是不会跟着扭转的。

变量
a ‘word’
b ‘hello’
var a = 'hello';
var b = 1;
b = a; // b = 'hello'
a = 'word';
// b = 'hello'

2. 援用类型值

援用类型也就是简单的数据类型其中包含 Object,Array,Function

援用类型的贮存构造不同于根本类型,在咱们定义一个变量贮存援用类型时,js 会在栈内存中寄存该变量以及指向堆内存对象的一个地址,这个地址指向咱们堆存储中寄存的援用值。

变量
a 地址一
b 地址二
graph TD
    A[地址一] -->B([1,2,3,4,5])
    c[地址二] -->d([6,7,8,9])

当咱们别离定义了一个变量 a 与变量 b,将变量 a 赋值给变量 b 毋庸置疑,此时变量 b 的值将会扭转。

变量
a 地址一
b 地址一
graph TD
    A[地址一] -->B([1,2,3,4,5])
    c[地址一] -->B([1,2,3,4,5])

此时我扭转变量 a 的值 b 的值也会跟着扭转的。

变量
a 地址一
b 地址一
graph TD
    A[地址一] -->B([1,2,3,4,5,6])
    c[地址一] -->B([1,2,3,4,5,6])
var a = [1,2,3,4,5];
var b = [6,7,8,9];
b = a;//b=[1,2,3,4,5];
a.push(6);
//b=[1,2,3,4,5,6]

3. 传递参数

传参置信大家都很不生疏,传参外面也有一些很乏味的货色。

function a(i){
    i++;
    return i;
}
var y = 10;
var res = a(y);
// y = 10;
// res = 11;

可能你会感觉我很无聊,不急,往下看

function a(obj){obj.b = 'hello';}
var newobj = new Object();
a(newobj);
//newobj.b = 'hello'

是不是感觉当传援用类型的时候,obj 就是指向内部的援用类型, 不慌持续往下看

function a(obj){
    obj.b = 'word';
    obj = new object();
    obj.b = 'hello word';
}
var newobj = new Object();
a(newobj);
//newobj.b = ?

这时候输入的值是多少呢,置信大家会有不同的认识,答案是 word。是不是有点想不明确。其实援用类型传参 obj 指向和内部 newobj 指向同一个地址并没有错,可是咱们要明确,传参其实是 js 在函数外部定义了一个 obj 的参数,所以 obj 能够说是 a 函数外部中的一个参数,一开始咱们将内部的 newobj 赋值给外部 obj, 因而他们指向了同一个地址,此时咱们扭转援用类型值 newobj 也跟着扭转,可是咱们又从新定义援用类型指向咱们部分的 obj,咱们的 obj 与内部 newobj 在无关联,而且函数执行结束后,局部变量也被销毁了。

这都是我集体的了解,如有不正确的中央,心愿各位大佬指导。

退出移动版