js简单数据类型和复杂数据类型,堆和栈

1.简单类型(值类型)
比如 stirng numberboolean null
其中null比较特殊
var t=null;
console.log(typeof t);//结果为object
基本类型记性类型返回都是返回本身只有null返回object。
2.复杂类型(引用数据类型)
对象、数组
我们要先了解堆和栈
复杂类型都存在堆里,简单类型都放在栈里,但是js中没有堆和栈直说,只是用这个来理解简单和复杂类型。
在这里插入图片描述
栈里面放的都是数值,当有数组需要存放的时候是先在栈存放一个地址,地址指向堆里,数据也在堆里。
3.简单类型传参
var num=10;
num=20;
console.log(num);//结果为20
在这里插入图片描述
第一次声明是num在栈里存放为10,但当第二次时20会把10替代。
function fn(a){
a++;
console.log(a);
}
var x=10;
fn(x);
console.log(x);//a为11 x为10
在这里插入图片描述
先声明的x=10这时候fn(x)x传递到函数里还是10执行函数变10+1=11所以a=11,但是这时候x的值存放在栈里的还是10并没有变所以输出x还是10。
4.复杂类型传参
function Person(name){
this.name=name;
}
function f1(x){
consolelog(x.name);//这里输出刘德华
x.name=‘张学友’;
console.log(x.name);//这里输出张学友
}
var p=new Person(‘刘德华’);
console.log(p,name);//这里输出刘德华
f1§;
console.log(p.name);//这里输出张学友
注意点在第二个函数第一个输出刘德华
这是复杂类型数据都存放在堆里栈里放的只是个地址,堆里放的数组是刘德华 x=p是赋值的地址但是地址指向的还是堆里的刘德华,所以第一个x.name=刘德华。后面x.name='张学友’这时候在栈里存放的事x的地址指向堆里的张学友所以最后输出张学友。
在这里插入图片描述
总结:只要记住复杂类型的数据放在一个单独空间,想要用的时候都是通过地址指向获取的,当把一个复杂类型的数据赋值给简单类型虽然会生成一个新的地址但是两个地址指向同一个数据。
用多了见过了就会明白,所有语言追其本质才能更好使用。
所有代码记事本手打有错误欢迎指正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值