js 值類型和引用類型
阿新 • • 發佈:2018-06-04
col 復制 也會 bool null pan pre ceo 不一定
今天來給大家介紹一下數據類型的另一種解讀,值類型和引用類型(及簡單類型和復合類型)
一、基本概念
ECMAscript變量包括兩種不同的數據類型的值,一種叫做簡單類型(值類型),指的是簡單的數據段,另一種叫做復合數據類型(引用類型),是由多個值構成的對象。
在js的數據類型中,number,boolean,string,null和undefined都屬於值類型,而函數和對象屬於引用類型。
二、數據類型判斷
基本類型:typeof
引用類型:instanceof
var a=10; console.log(typeof a); //number var b=true; console.log(typeof b); //boolean var arr=[]; console.log(arr instanceof Array); //true var obj={}; console.log(obj instanceof Object); //true; var fun=function(){ var i=0; console.log(i); } console.log(fun instanceof Function) //true
三、存儲機制
基本數據類型:是存放於棧內存中,包括變量標識符和變量的值,基本數據類型復制後開辟的是新的內存,兩個變量互不影響。
引用類型:保存在堆內存中,是對地址的引用(及指針),所以變量復制後的兩個變量指向的還是同一個對象,因此對其中一個進行操作,另一個結果也會受到影響。
先給大家舉點例子吧
var num1=10; var num2=num1; num2-=2; console.log(num1,num2); //10,8 var arr1=[1,2,3]; var arr2=arr1; arr2.push(4); console.log(arr1,arr2); //[1,2,3,4],[1,2,3,4] var person1={ name:‘zhangsan‘, age:20 } var person2=person1; person2.name=‘lisi‘; console.log(arr1,arr2); //{name:‘lisi‘,age:20},{name:‘lisi‘,age:20}
四、創建對象實例的方法
1,使用new操作符後跟Object構造函數
2,字面量
var obj=new Object();//或 var obj2={}; console.log(obj,obj2); //{},{} console.log(obj==obj2) false 堆內存,不同地址 /獲取 //以及點表示法和方括號表示法 var person1={ name:‘zhangsan‘, age:20 } console.log(person1.name)//zhangsan console.log(person1[‘name‘])//zhangsan
ps:點表示法和方括號表示法的區別
1,能用點表示法標識的一定可以用方括號表示,但能用方括號表示的,不一定能用點表示
2,方括號表示法可以用變量名做屬性名,點表示法不能
3,方括號可以用純數字表示屬性,點表示法不能
4,方括號表示法可以用js的關鍵字和保留字作為屬性,點表示法不能
此處我就不向大家要一一舉例啦,這裏還是很好理解的,總之就是方括號表示法的功能強於點表示法,但是一般我們用點表示法註意下特殊的就好了。
js 值類型和引用類型