javascript中的变量在内存里面原来是这样的!
作者:极客小俊 一个专注于web技术的80后 你不用拼过聪明人,你只需要拼过那些懒人 你就一定会超越大部分人! 原创技术文章 博客: GeekerJun 标量类型的值 一般存储在栈区中! 标量指: 整型、浮点、字符串、布尔值、等.. 对象类型分为: 对象引用 和 对象体! 对象引用存储在栈区中 、对象体存储在堆区中、 1. 内存空间基本数据存储分析图1 注意: 一旦new一个对象,就必然会在内存中生成新的的区域来存储对象数据、 而且最重要的就是这个时候在内存中对象的地址是不一样的 , 因为 new 会生成一个新的地址在栈区中 2.对象引用类型地址传递分析图2 代码案例1: var json={ "username":"张三", "age":22, "fn1":function(){ console.log('我的名字叫'+this.username); } } //通过对象引用修改属性值1 /*function fn2(obj){ obj.username="李四"; } fn2(json);*/ //通过对象引用修改属性值2 var a=json; a.username='李四'; console.log(json.username); 分析图如下 3.对象引用类型地址传递分析图3 代码案例2: function Person(name,age,salary) { this.name=name; this.age=age; this.salary=salary; } function fn1(obj) { obj.name='王武'; obj=new Person('李四',24,8000); console.log(obj.name); } var obj=new Person('张三',33,6000); console.log(obj.name); //结果: 张三 fn1(obj); //结果 李四 console.log(obj.name); // 王武 分析图如下 对象引用 图分析小结: 在js中, 普通变量值作为函数的参数就是 值传递 在js中, 对象引用类型的变量作为函数的参数 就是 址传递! 所以 注意一下 这里的值传递 与 址传递 一旦new一个对象 就一定会在堆区中创建一个空间,并赋予一个新地址 上面已经说过了! 4.对象数据的比较 在js中、基本数据类型数据的比较 是值的比较 值相同就可以了、 对象类型的比较 要满足两个要求、 第一是值要相同、第二引用地址也要相同才行 案例代码: //--案例1 var a=[1,2,3]; var b=[1,2,3]; console.log(a==b); //结果为false 虽然值一样,但地址是不同的! var a=[1,2,3]; var b=a; console.log(a==b); //结果为true 因为b指向了a这个地址,并且值也能够得到! 原理图 如下: 如果我的博客对你有帮助、如果你喜欢我的博客内容,请 点赞 评论 收藏 一键三连哦! 如果以上内容有任何错误或者不准确的地方,欢迎在下面 👇 留个言指出、或者你有更好的想法.