js的數據類型
number,string,null,undefined,boolean,object,array
js的基本數據類型(5種)
nuber,null,undefined,boolean,string
js的引用數據類型()
object,array,function,data
定義:
基本數據類型:指的是簡單的數據段,引用數據類型指的是有多個值構成的對象
當我們吧變量賦值給一個變量時,解析器首先要確認的就是這個值是基本類型值,還是引用類型值。
js 的引用數據類型是保存在堆內存中的對象。
與其他語言的不同是,你不可以訪問堆內存空間中的位置和操作堆內存空間,只能操作對象在
棧內存中的引用地址。所以,引用類型數據在站內從中保存的實際上是對象在堆內存中的引用地址,
通過這個引用地址可以快速查找到保存中堆內存中的對象
let obj1 = new Object();
let obj2 = obj1;
obj2.name = "11111"
console.log(obj1.name)//11111
說明這兩個引用數據類型指向同一個堆內存對象,obj1賦值給obj2,實際上這個堆內存對象在棧內存
的引用地址復制了一份給obj2,但是實際上他們共同指向同一個堆內存對象,實際上改變的是堆內存對象。
js中對象和函數的關系
首先,什么是對象?
js中所有事物都是對象,對象是擁有屬性和方法的數據,由此可見基本數據類型不是對象,剩下的
引用數據類型都是對象,(注意null也是引用數據類型),也就有人說對象是若干屬性的集合。
1.0 函數是一種對象
function test(){} console.log(test instanceof Object);//true,
所以很明顯函數是一種對象,但你不能說是對象的一種,這不存在包含關系
2.0 對象都是通過函數創建的
demo
function test(){} let a = new test() console.log(test2 instance Object);//true
這個例子說明對象可以被函數創建,那為什么要說對象都是通過函數創建的,那對象字面量是不是也是通過函數創建的,答案是肯定得,這是一種語法糖,demo
let a = {name:'123'}
let obj = new Object()
obj.name = "123"
上面的對象字面量其實是通過下面的構造函數來創建的,其中的Object是一種函數
console.log(typeof Object)//function
通過上面的簡單例子我們可以得出一個結論
對象是通過函數創建的,而函數又是一種對象。