JavaScript 語言的每個值,都屬於某一種數據類型。JavaScript 的數據類型,共有七種:函數
其中Symbol是ES6新增的基本數據類型,本文僅介紹前六種。code
1. 數值(number):
1.1 整數和浮點數
JavaScript 內部,全部數字都是以64位浮點數形式儲存,即便整數也是如此。對象
1 === 1.0 // true
1.2 精度
在國際標準 IEEE 754中,JavaScript 浮點數的64個二進制位,從最左邊開始,第1位數字符號位決定了一個數的正負(0爲正數,1爲負數),第2~12位指數部分決定了數值的大小,第13~64小數部分決定了數值的精度。
1.3 數值的進制
JavaScript 對整數提供四種進制的表示方法:十進制、十六進制、八進制、二進制。ip
1.4 NaN
NaN意爲Not a Number,主要出如今將字符串解析成數字出錯的場合,如:字符串
618 - 'x' // NaN
NaN不等於任何值,包括它自己。:
NaN === NaN // false
2. 字符串(string):
用''或""引發來,裏面沒有包含任何內容則是空字符串,長度爲0。而裏面有空格的稱爲空格字符串,長度爲1,二者是不同的。
2.1 多行字符串
若是字符串分紅多行,能夠在每一行的尾部使用反斜槓,不加則會報錯。除了使用反斜槓外,也能夠經過鏈接運算符(+)來鏈接多個單行字符串,兩種方法所得結果一致,建議使用鏈接運算符(+)。string
var longString = 'Long \ long \ long \ string'; longString // "Long long long string"
var longString = 'Long ' + 'long ' + 'long ' + 'string'; longString // "Long long long string"
ES6中新增反引號(`
)來寫多行字符串,而這個多行字符串的length會包含回車的長度。
2.2 轉義
反斜槓()在字符串內有特殊含義,用來表示一些特殊字符,因此又稱爲轉義符。常須要用反斜槓轉義的特殊字符有:io
2.3 length屬性
length屬性返回字符串的長度,該屬性由字符串本省決定,沒法經過賦值改變。console
var s = 'mamamoo'; s.length // 7 s.length = 5; s.length // 7
3. 布爾值(boolean):
布爾值只有「真」和「假」這兩個值。「真」用關鍵字true表示,「假」用關鍵字false表示。若是 JavaScript 預期某個位置應該是布爾值,會將該位置上現有的值自動轉爲布爾值。轉換規則是除了undefined、null、false、0、NaN、""或''(空字符串)六個值被轉爲false,其餘值都視爲true。function
4. undefined和null:
null與undefined均可以表示「沒有」,含義很是類似。二者的區別是:變量
5. 對象(object):
5.1 生成方法
對象簡單來講就是一組「鍵值對」(key-value)的集合,是一種無序的複合數據集合。
生成方法是用大括號把鍵值對包起來後賦值給變量,兩個鍵值對之間用逗號分隔。「:」前是鍵名,「:」後是鍵值。如:
var obj = { foo: 'Hello', bar: 'World' };
5.2 鍵名與鍵值
對象的全部鍵名都是字符串,要加引號,不加也會自動轉爲字符串。若是鍵名不符合標識名的條件(好比第一個字符爲數字,或者含有空格或運算符),且也不是數字,則必須加上引號,不然會報錯。而鍵值是什麼類型就用該類型的格式。
5.3 屬性
對象的每個鍵名又稱爲「屬性」(property),它的「鍵值」能夠是任何數據類型。
讀取對象的屬性,有兩種方法,一種是使用點運算符,還有一種是使用方括號運算符。
var obj = { p: 'Hello World' }; obj.p // "Hello World" obj['p'] // "Hello World",[]內''必定要加
var obj = { p: 1 }; Object.keys(obj) // ["p"] delete obj.p // true obj.p // undefined Object.keys(obj) // []
var obj = { key1: 1, key2: 2 }; Object.keys(obj); // ['key1', 'key2']
in運算符用於檢查對象是否包含某個屬性(注意,檢查的是鍵名,不是鍵值),若是包含就返回true,不然返回false。
var obj = {a: 1, b: 2, c: 3}; for (var i in obj) { console.log('鍵名:', i); console.log('鍵值:', obj[i]); } // 鍵名: a // 鍵值: 1 // 鍵名: b // 鍵值: 2 // 鍵名: c // 鍵值: 3
使用type of可得變量的數據類型,如:
var t = 619; type of t;//"number"
特別注意的是:
4.1 轉爲string
var t = 619; t.toString();//"619"
null沒有toString這個API,不能使用toString,會報錯
var n = null; n.toString; //Uncaught TypeError: Cannot read property 'toString' of null
undefined也會報錯
var n = undefined; n.toString(); //Uncaught TypeError: Cannot read property 'toString' of undefined
object使用toString會獲得"[object Object]"。
var object = {name:"po"}; object.toString() //"[object Object]"
window.String(null)//"null"
爲何1 + '1' = '11'
?
這是由於當兩個不一樣數據類型相加時,會優先選擇轉化爲字符串,因此1 + '1'
至關於1.toString() + '1'
,因而結果爲兩個字符串1相加,即字符串11。
4.2 轉爲布爾
Boolean(0)//false Boolean('')//false Boolean(' ')//true
!! ''//false !! ' '//true
五個falsy值:0、NaN、空字符串、null、undefined
4.3 轉爲Number
Number('1')//1
//第二位參數要寫,是表示進制
parseFloat('1.23')//1.23
'1'-0//1
+ null//0