Author:3# 一个专注于web技术的80后
我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人!
CSDN@极客小俊,CSDN官方首发原创文章
个人博客: 👉 cnblogs.com 👈
标量类型的值 一般存储在栈区中!
标量指: 整型、浮点、字符串、布尔值、等…
对象类型分为: 对象引用 和 对象体!
对象引用存储在栈区中 、对象体存储在堆区中、
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);
}
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这个地址,并且值也能够得到!
"点赞" "评论" "收藏"
如果以上内容有任何错误或者不准确的地方,欢迎在下面 👇 留个言指出、或者你有更好的想法,欢迎一起交流学习~~~
转载:https://blog.csdn.net/windowsxp2018/article/details/108435245
查看评论