原始类型:
number、boolean、null、undefined、string、symbol
存放在栈中,占内存小,读取快
引用类型:
object 可以动态分配内存、可以存大数据
原始数据的值存放在栈中
原始类型保存值在栈中,而引用类型保存的是指针。
例1:
var  a=1;
var b=false;
var c={
	name:‘xp’,
	hobies: ['running','listen music']
}
栈:
| a | 1 | 
|---|---|
| b | false | 
| c | 指针1 | 
堆:
| 指针1 | {name:‘xp’,hobies:指针2} | 
|---|---|
| 指针2 | [‘running’,‘listen music’] | 
如上图,变量c在栈中保存指针1,hobies又是一个引用类型,所以在堆中又创建一个指针2的内存用来存放。
例2:
增加操作:
var d=c;
d.hobies = [1,2,3]//c和d的都被修改
| c | 指针1 | 
|---|---|
| d | 指针1 | 
例3:
function test(person){
	person.age=20;
	person={
		age:30
	}
	return person
}
var p1={age:10};//20
var p2=test(p1);//30
执行test函数,把p1的指针赋给了person,然后修改age,两个都被修改。重新给person赋值,给了新的指针,和p1没有关系。
undefined
undefined表示已定义未赋值,not defined表示未定义。
null
null是原始数据类型,但是typeof null是object,是一个源远流长的bug。
赋值的方式:
字面量、String()、new String()
var a='as';
var b=String(a);
var c=new String(a);
a.length = 0;//转为String对象,对象的length被赋值,之后对象被销毁
console.log(a.length);//2
a.split('')//['a','s']同理返回的是string对象操作的返回结果,a不受影响
a//'as'
前两种返回的是基本类型,new出来的是对象。
当基本类型调用方法时,都会由构造函数转为对应的对象去执行,执行完成后对象被销毁。这个对象就是包装对象,number、string、boolean都有对应的包装对象,null和undefined没有,所以他们不具有可以执行的方法。
例4:
2.length 会报错,为何?
数字后面的小数点会被认为是小数。
2…length 或 2.0.length 或 (2).length 或 2 .length
                  
                  
                  
                  
本文深入探讨JavaScript中的原始类型与引用类型的区别,包括它们在内存中的存储方式,以及如何影响变量赋值与函数调用的行为。通过实例解析,帮助读者理解JavaScript的内存管理机制。
          
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					1万+
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            