js 基本数据类型和引用数据类型

205 阅读1分钟

遇到问题场景:

定义一个方法对数据进行操作,但是通过参数来改变数据,发现改变不了数据的值 。如下:

function f(l,k) {    
     l = k;   
     return l;
}
var a = {"name": "123"};
var b = {"name": "345"};
f(a,b);
console.log(a);//{"name": "123"}

由此知道这样直接通过参数赋值给引用类型数据 只是改变指针,而没有真正改变堆内存的数据。

这里就想到用Object.assign()

function f(l,k) {    Object.assign(l,k);    return l;}

以下是网上寻找的相对较好的解释。


<script type="text/javascript">

var bb = {n:1};//引用类型:Function,Array,Object

(function (bb) {

bb.n = 2;

console.log(bb.n);

})(bb)

console.log(bb.n);

//输出2 2


var foo = 1; //基本类型string,number,boolean,null,undefined

(function (foo) {

foo = 2;

console.log(foo);

})(foo);

console.log(foo)

</script>

//输出2 1

这里是引用类型与基本类型的问题

1.基本类型所有的值存储在存区,js可以直接对值进行操作;而引用类型的所有值存储时,是堆内存中的,js不能直接操作值,只能擦操作属性改变值;


基本类型复制时原数据不受到影响,而引用类型则是通过复制指针,实现复制,但指针指向的是同一个对象,所以改变其中一个两个 都改变;



更多参考:

www.cnblogs.com/go4it/p/967…

www.cnblogs.com/chenwenhao/…