关于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在无关联,而且函数执行结束后,局部变量也被销毁了。

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理