2:30 pm-
動態(tài)類型
js是一種弱類型or動態(tài)語言-----不用提前聲明變量可直接賦值;一個變量可保存不同類型的數(shù)據(jù)
數(shù)據(jù)類型
- 原始類型(基本數(shù)據(jù)類型)
- Null
- Undefined
- Boolean
- Number
- String
- Symbol
可通過構(gòu)造函數(shù)實現(xiàn)將字符串轉(zhuǎn)換成對象--------字符串的包裝類型
- String、Number、Boolean
通過字面量的方式創(chuàng)建:var a = 'string';,這時它就是基本類型值;通過構(gòu)造函數(shù)的方式創(chuàng)建:var a = new String('string');這時它是對象類型。
基本類型是沒有屬性和方法的,但仍然可以使用對象才有的屬性方法。這時因為在對基本類型使用屬性方法的時候,后臺會隱式的創(chuàng)建這個基本類型的對象,之后再銷毀這個對象。
- 對象類型(引用數(shù)據(jù)類型)
- 數(shù)組
- 函數(shù)
堆和棧
堆和棧是內(nèi)存中劃分出來用來存儲的區(qū)域。
棧(stack): 為自動分配的內(nèi)存空間,它由系統(tǒng)自動釋放。
堆(heap): 動態(tài)分配的內(nèi)存,大小不定,也不會自動釋放。
基本類型的比較是值的比較
引用類型的比較是引用的比較
- 內(nèi)存分配不同。
原始值存儲在棧中,它們的值直接存儲在變量訪問的位置,而引用值存在堆中,存儲在變量處的值是一個指針(point),指向存儲對象的內(nèi)存處.- 訪問機制不同
js 中不允許直接訪問存在堆內(nèi)存中的對象,當我們訪問一個對象的時候,首先得到這個對象存在堆中的地址,然后通過這個地址去獲取對象中的值,即按引用訪問,而原始類型的值可用直接訪問。- 復制機制不同
將一個保存著原始值的變量賦值給另一個變量時,會將原始值的副本賦值給新變量,產(chǎn)生一個新的變量,兩個變量完全獨立,只是他們擁有相同的值。而引用值進行變量賦值是,會將該內(nèi)存地址賦值給新變量,這兩個變量的指針都指向了堆內(nèi)存中的同一個對象,他們兩個并不是相互獨立的,他們中任何一個發(fā)生改變都會反映到另外一個身上。
- Boolean:true 和 false
- Null:null
- Undefined:默認值undefined
-
Number:根據(jù) ECMAScript 標準,JavaScript 中只有一種數(shù)字類型:基于 IEEE 754 標準的雙精度 64 位二進制格式的值(-(263 -1) 到 263 -1)。
它并沒有為整數(shù)給出一種特定的類型除了能夠表示浮點數(shù)外,還有一些帶符號的值:+Infinity,-Infinity 和 NaN (非數(shù)值,Not-a-Number)。- 一些位于算符:&(與)、|(或)、^(異或)、~(非)、<<(左移)>>(符號右移) >>>(無符號右移)
-
String :
在字符串中的每個元素占據(jù)了字符串的位置。第一個元素的索引為0,下一個是索引1,依此類推。字符串的長度是它的元素的數(shù)量。
用""或‘’表示
- 獲取一個字符串的子串可通過選擇個別字母或者使用
String.substr().- 兩個字符串的連接使用連接操作符 (
+) 或者String.concat().
優(yōu)點
容易連接構(gòu)造復雜的字串符
字符串容易被調(diào)試(你看到的往往在字符串里)
字符串通常是許多APIs的常見標準 (input fields, local storage values, XMLHttpRequest當使用responseText等的時候回應) 而且他只能與字符串一同使用。
Symbol:ECMAScript 第6版新定義的。符號類型是唯一的并且是不可修改的, 并且也可以用來作為Object的key的值
Symbol()函數(shù)會返回symbol類型的值,該類型具有靜態(tài)屬性和靜態(tài)方法。它的靜態(tài)屬性會暴露幾個內(nèi)建的成員對象;它的靜態(tài)方法會暴露全局的symbol注冊,且類似于內(nèi)建對象類,但作為構(gòu)造函數(shù)來說它并不完整,因為它不支持語法:"new Symbol()"。每個從
Symbol()返回的symbol值都是唯一的。一個symbol值能作為對象屬性的標識符;這是該數(shù)據(jù)類型僅有的目的。
對象
