JavaScript語言的每個值,都屬於一種數據類型,共有七種:number
、string
、boolean
、symbol
(ES6新增)、undefined
、null
、object
。 注意沒有 array
類型也沒有 function
類型。編程
1
、 1.1
、 .1
1.23e2
0b11
011
(後來 ES5 添加了 0o11 語法)0x11
''
var s = '12345' +
'67890' // 無回車符號
或
var s = `12345
67890` // 含回車符號
複製代碼
反斜槓(\)在字符串內有特殊含義,用來表示一些特殊字符,因此又稱爲轉義符。數組
須要用反斜槓轉義的特殊字符,主要有下面這些:bash
\0 null(\u0000)
\b 後退鍵(\u0008)
\f 換頁符(\u000C)
\n 換行符(\u000A)
\r 回車鍵(\u000D)
\t 製表符(\u0009)
\v 垂直製表符(\u000B)
\' 單引號(\u0027) \" 雙引號(\u0022) \\ 反斜槓(\u005C) 複製代碼
上面這些字符前面加上反斜槓,都表示特殊含義。若是在非特殊字符前面使用反斜槓,則反斜槓會被省略。若是字符串的正常內容之中,須要包含反斜槓,則反斜槓前面須要加一個反斜槓,用來對自身轉義。函數
true
和 false
若是JS預期某個位置應該是布爾值,會將該位置上現有的值自動轉爲布爾值。轉換規則是除了下面六個值被轉爲false,其餘值都視爲true。spa
undefined
null
false
0
NaN
""或''(空字符串,引號之間沒有空格)
複製代碼
a && b
在 a
和 b
都爲 true
時,取值爲 true
;不然爲 false
a || b
在 a
和 b
都爲 false
時,取值爲 false
;不然爲 true
Symbol
是ES6引入的一種新原始數據類型,表示獨一無二的值。設計
Symbol
值經過 Symbol
函數生成。這就是說,對象的屬性名如今能夠有兩種類型,一種是原來就有的字符串,另外一種就是新增的 Symbol
類型。凡是屬性名屬於 Symbol
類型,就都是獨一無二的,能夠保證不會與其餘屬性名產生衝突。code
null
與 undefined
均可以表示「沒有」,含義很是類似。將一個變量賦值爲 undefined
或 null
,語法效果幾乎沒區別。對象
在 if
語句中,它們都會自動轉爲 false
,相等運算符 ==
甚至直接報告二者相等。ip
undefined == null //true
複製代碼
都表示沒有值,至於 JS 爲何有兩個表示「沒有值」的東西:字符串
1995年JavaScript誕生時,最初像Java同樣,只設置了null做爲表示"無"的值。根據C語言的傳統,null被設計成能夠自動轉爲0。可是,JavaScript的設計者Brendan Eich,以爲這樣作還不夠,有兩個緣由。首先,null像在Java裏同樣,被當成一個對象。可是,JavaScript的數據類型分紅原始類型和合成類型兩大類,Brendan Eich以爲表示"無"的值最好不是對象。其次,JavaScript的最第一版本沒有包括錯誤處理機制,發生數據類型不匹配時,每每是自動轉換類型或者默默地失敗。Brendan Eich以爲,若是null自動轉爲0,很不容易發現錯誤。所以,Brendan Eich又設計了一個undefined。
undefiend
null
。若是你想表示一個還沒賦值的字符串/數字/布爾/symbol,就用 undefined
(可是實際上你直接 var xxx
一下就好了,不用寫 var xxx = undefined
)object
就是上面幾種基本類型(無序地)組合在一塊兒;object
裏面能夠有 object
:var person = {
name: 'aaa',
'child': {
name: 'bbb'
}, // 最後這個逗號無關緊要
}
複製代碼
object
的 key
一概是字符串,不存在其餘類型的 key
;object['']
是合法的;object['key']
能夠寫做 object.key
;object.key
與 object[key]
不一樣;delete object['key']
(delete命令用於刪除對象的屬性);'key' in object
(in運算符用於檢查對象是否包含某個屬性,注意檢查的是鍵名,不是鍵值);number
、string
、boolean
typeof 123 //"number"
typeof '你好' //"string"
typeof true //"boolean"
複製代碼
function
function f() {}
typeof f //"function"
複製代碼
undefined
返回字符串 'undefined'
。typeof undefined //"undefined"
複製代碼
利用這一點,typeof
能夠用來檢查一個沒有聲明的變量,而不報錯。
v //ReferenceError: v is not defined
typeof v //"undefined"
複製代碼
上面代碼中,變量 v
沒有用 var
命令聲明,直接使用就會報錯。可是,放在 typeof
後面,就不報錯了,而是返回 undefined
。 實際編程中,這個特色一般用在判斷語句:
// 錯誤的寫法
if (v) { // ...} //ReferenceError: v is not defined
// 正確的寫法
if (typeof v === "undefined") { // ...}
複製代碼
object
。typeof window //"object"
typeof {} //"object"
typeof [] //"object" 數組本質上只是一種特殊的對象
typeof null //"object"
複製代碼
這裏 null
的類型也是 object
,這是因爲歷史緣由形成的。爲了兼容之前的代碼,後來就無法修改了。這並非說 null
就屬於對象,本質上 null
是一個相似於 undefined
的特殊值。