JavaScript 數據類型分爲兩種,一種是基本數據類型:String、Number、Boolean、undefined 和 null,另外一種是複雜數據類型:Object。JavaScript 不支持任何建立自定義類型的機制,全部的值最終都將是上述六種數據類型之一。面試
首先,咱們瞭解一下基本數據類型。函數
1. String編碼
JavaScript 採用 UTF-16 編碼的 Unicode 字符集,JavaScript 中的字符串是由一組無符號的 16 位值組成的序列,最經常使用的 Unicode 字符都是經過 16 位的內碼來表示的,並表明字符串中的單個字符spa
var p = 'π' var e = 'e' p.length // 1; p 包含一個 16 位值 e.length // e 經過 UTF-16 編碼以後包含兩個 16 位值:"\ud835\udc52"
只要引用了字符串的屬性,JavaScript 就會將字符串值經過new String(s)的方式轉換爲對象,這個對象繼承了字符串的方法,一旦引用結束,這個新建立的對象就會被銷燬3d
var s = 'test' s.len = 4 var t = s.len // undifined 複製代碼
第二行代碼建立一個臨時對象,並給這個對象的len屬性賦值,隨即銷燬這個對象,第三行代碼用的是原始的字符串值,他沒有len屬性,因此爲undifined指針
在讀取字符串的屬性值時,表現的就像對象同樣。但若是試圖給屬性賦值,則會忽略這個操做,修改只發生在臨時對象身上,而這個臨時對象並未保存下來code
這個臨時對象稱之爲包裝對象,字符串(還有數字和布爾值)的屬性都是隻讀的,並不能賦值,有別於其餘的對象對象
字符串是存放在堆內存裏面的,一旦建立就不可更改,若是想改變某個變量保存的字符串,就必須先銷燬原來的字符串,再用一個新的來填充該變量。繼承
2. Numberip
在 JavaScript 裏,全部與數字有關的都是 Number 類型,Number 類型又分爲整數值和浮點數值,可是保存浮點數的內存空間是保存整數的內存空間的兩倍,因此 JavaScript 固然不但願在寸土寸金的內存空間裏過多的存放浮點數,有下面兩種狀況會將浮點數轉成整數:
- 小數點後面沒有跟數字,好比 1.
- 小數點後面等於 0,好比 1.00
都會轉成整數 1
在 Number 類型裏還有一個值是 NaN(Not a Number),若是面試官問你該怎麼判斷一個變量是否是 NaN 呢?你固然不能答使用x == NaN,由於這個特殊的值與任何值都不相等,要想判斷它還得使出真功夫。有如下兩種方法能夠判斷:
- 使用x != x來判斷,由於這貨連本身都不認識,只要返回 true,那就證實 x 是 NaN 無疑了
- JavaScript 爲咱們提供了函數isNaN()來方便咱們
任何類型的數據與 Number 類型的數據進行數學運算時都會被轉成數字,不能轉成數字的就是 NaN
3. Boolean
Boolean 類型沒什麼好說的,就兩個值:true 和 false,可是須要注意的是在 JavaScript 中,類型轉換爲咱們提供了更多的可能性,如今就讓咱們來簡單瞭解一下其餘數據類型轉換成布爾類型。
數值類型 轉換成布爾值 undefined false null false 布爾值 true/false 數字 +0、-0 和 NaN 是 false,其餘是 true 字符串 空字符串是 false,其餘是 true 對象 true
JavaScript 中的任何值均可以轉換成布爾值,其中只有六個轉換爲 false
4. Undefined
Undefined 類型只有一個值 undefined,這個值用來表示已聲明但未被賦值的變量。
5. Null
Null 也是隻有一個值:null,用來表示空對象指針。
undefined 與 null 的區別一句話歸納:undefined 表示「缺乏值」,此處應該有值,可是還未定義;null 表示沒有對象,此處不該該有值
typeof 操做符
瞭解基本數據類型的時候,就不得不來了解一下 typeof 操做符,它但是咱們判斷基本數據類型的一個好幫手。
typeof 用來檢測變量的數據類型,返回值一共有六個http://www.fuke029.com/
- 'number'
- 'string'
- 'boolean'
- 'object'
- 'undefined'
- 'function'
注意這六種都是字符串類型,若是咱們寫typeof(typeof('123'))那麼返回的是'string'
在 JavaScript 中,基本類型的值都是存放在棧內存中的,變量之間的賦值都是經過拷貝進行的,此後兩個變量再參與任何操做的時候都不會相互影響
說完基本數據類型以後就是複雜類型了,複雜類型自己包含不少,後面我會針對每一種複雜類型進行詳細講述,歡迎關注讓面試官另眼相看系列文章,若是有錯或者更好的意見請指出,祝各位都能獲得面試官的青睞,早日找到心儀工做!