JavaScript共有7种数据类型:
- number
- string
- boolean
- null
- undefined
- obj
- Symbol
前5种存在栈中,栈中变量名存储的是值,object存在堆中(对象数值类型也存储在堆中),栈中变量名存储的是堆中的地址
obj1 = obj;
obj1拿到的是obj的地址,不是地址中的值,相当于拿到的是一把钥匙,而不是箱子里的内容.假设这个地址是#aaaaaa,那么开启这把箱子的钥匙就有两把,分别是obj和obj1,任何一把都能改变箱子里的内容,箱子里的内容一旦改变,那么任何一把钥匙在此后打开箱子后拿到的都是改变后的值
此时obj对象的属性改变,obj1读到的值也改变
。。。
综上,可以得出以下三点:
不论是对象还是前5原始数据类型,它们的变量名都存储在栈中
前5种基本数据类型的变量名在栈中存储的是值,但是它们的方法是通过相应的对象数据类型调用的,所以存取是栈调用,调用方法是堆调用,即对象调用
对象存储在堆中,栈中存储的对象变量名存储的是堆中的地址,对象改变,是堆中的属性改变,但是地址并不改变
原文地址:https://www.cnblogs.com/ltfxy/p/12100121.html
时间: 2024-10-18 02:51:14