JavaScript 是一種 弱類型或者說 動態語言。這意味着你不用提早聲明變量的類型,在程序運行過程當中,類型會被自動肯定。(解釋一行,執行一行)這也意味着你可使用 同一個變量保存不一樣類型的數據:
最新的 ECMAScript 標準定義了 7 種 數據類型:web
6種 原型數據類型:編程
以及 Object 對象segmentfault
除 Object 之外的全部 類型都是不可變的(值自己沒法被改變)。例如,與 C 語言不一樣, JavaScript中字符串是不可變的(譯註:如,JavaScript 中對字符串的操做必定返回了一個新字符串,原始字符串並無被改變)。咱們稱這些類型的值爲「原始值」:
布爾值數據類型只能有兩個值,它們是文本 true 和 false。 布爾值是一個真值:它指定條件是否爲 true。
true 和 1 比較是相同,false 和 0 比較是相同(是 「==」 比較),由於內部會實現數據類型轉化,將 true 轉換成 1,將 false 轉換成 0。可是使用 「===」 就不相等了,由於他們的數據類型不等。數組
雖然Boolean類型的字面值只有兩個,但JavaScript中全部類型的值都有與這兩個Boolean值等價的值。要將一個值轉換爲其對應的Boolean值,能夠調用類型轉換函數Boolean(),例如:瀏覽器
在這個例子中,字符串message被轉換成了一個Boolean值,該值被保存在messageAsBoolean變量中。能夠對任何數據類型的值調用Boolean()函數,並且總會返回一個Boolean值。至於返回的這個值是true仍是false,**取決於要轉換值的數據類型及其實際值。框架
數據類型 | 轉換爲true的值 | 轉換爲false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空的字符串 | ""(空字符串) |
Number | 任何非0數值(包括無窮大) | 0和NAN |
Object | 任何對象 | null |
Undefined | 不適用 | undefined |
Null 數據類型在 JavaScript 中 僅具備一個值:null。null 關鍵字不能用做函數或變量的名稱。
包含 null 的變量不包含有效的數字、字符串、布爾值、數組或對象。經過爲變量賦 null值能夠清除變量的內容(不刪除變量)。編程語言
(1)在 JavaScript 中,null 與 0 不一樣(在 C 和 C++ 中)。 函數
(2)JavaScript 中的 typeof 運算符將 null 值報告爲 Object 類型而不是 Null 類型。(從邏輯角度來看,null值表示一個空對象指針) 測試
若是定義的變量準備在未來用於保存對象,那麼最好將該變量初始化爲null而不是其餘值。這樣一來,只要直接檢測null值就能夠知道相應的變量是否已經保存了一個對象的引用。spa
實際上,undefined值是派生自null值的,所以ECMA-262規定對它們的相等性測試要返回true。
儘管null和undefined有這樣的關係,但它們的用途徹底不一樣。不管在什麼狀況下都沒有必要把一個變量的值顯式地設置爲undefined,但是一樣的規則對null卻不適用。
換句話說,只要意在保存對象的變量尚未真正保存對象,就應該明確地讓該變量保存null值。這樣作不只能夠體現null做爲空對象指針的慣例,並且也有助於進一步區分null和undefined。
Undefined 類型只有一個值,即特殊的 undefined。在使用var聲明變量但 未對其加以初始化時,這個變量的值就是 undefined。
undefined 翻譯中文 → 未定義(defined 翻譯中文 → 定義)
在早期的JavaScript版本中是沒有規定undefined這個值的,因此在有些框架中爲了兼容舊版瀏覽器,會給window對象添加undefined值。
一、若使用 「==」 進行比較,則他們是相等的,由於比較的是值
二、區分他們的兩種方法(比較他們的數據類型)
(1)使用 typeof 將他們區分
(2)若使用全等 「===」 ,比較的是值和數據類型,只有全都相同才返回 true
Number類型用來表示 整數值和 浮點數值,還有一種特殊的數值,即 NaN(非數值 Not a Number)。
整數值能夠是 正整數、 負整數和 0。 它們可經過以 10 爲基數(十進制)、以 16 爲基數(十六進制)和以 8
爲基數(八進制)來表示。 JavaScript 中的 大多數數字都寫成十進制形式。
經過在整數前面加前導「0x」(零和 x|X)來表示十六進制(「hex」)整數。 字母 A 到 F 以單個數字的形式表示以 10 爲基數的 10 到 15。 字母 A 到 F 用於以單個數字的形式表示以 10 爲基數的 10 到 15。 即,0xF 至關於 15,0x10 至關於 16。
經過在八進制整數前面加前導「0」(零)來表示八進制整數。 八進制整數只包含 0 到 7 的數字。 具備前導「0」幷包含數字「8」和/或「9」的數字將被解釋爲十進制數字。
浮點值能夠是 帶有小數部分的整數。此外,還能夠用 科學計數法來表示它們。即,使用大寫或小寫字母「e」來表示「10 的冪」。
JavaScript 使用數字表示形式的 8 字節 IEEE 754 浮點標準來表示數字。 這意味着您能夠編寫最大爲 1.79769x10308 和最小爲 5x10-324 的數字。 包含小數點且小數點前面有單個「0」的數字被解釋爲十進制浮點數。
NaN → 英文翻譯 Not A Number
NaN 用於表示一個 原本要返回數值的操做數未返回數值的狀況(這樣就不會拋出錯誤了)。例如,在其餘編程語言中,任何數值除以0都會致使錯誤,從而中止代碼執行。但在 JavaScript中,任何數值除以0會返回NaN,所以不會影響其餘代碼的執行。
NaN自己有兩個非同尋常的特色。首先,任何涉及NaN的操做(例如NaN/10)都會返回NaN,這個特色在多步計算中有可能致使問題。其次,NaN與任何值都不相等,包括NaN自己。例如,下面的代碼會返回false。
isNaN()函數,用於判斷是不是一個非數字類型。若是傳入的參數是一個非數字類型,那麼返回true;不然返回false;
isNaN()函數,傳入一個參數,函數會先將參數轉換爲數值。若是參數類型爲對象類型,會先調用對象的valueOf()方法, 再肯定該方法返回的值是否能夠轉換爲數值類型。若是不能,再調用對象的toString()方法,再肯定返回值。
JavaScript的字符串類型用於表示文本數據。
String是一組16位的無符號整數值的「元素」。在字符串中的每一個元素佔據了字符串的位置。第一個元素的索引爲0,下一個是索引1,依此類推。字符串的長度是它的元素的數量。
不一樣於類 C 語言,JavaScript 字符串是不可更改的。這意味着字符串一旦被建立,就不能被修改。可是,能夠基於對原始字符串的操做來建立新的字符串。
(1)獲取一個字符串的子串可經過選擇個別字母或者使用 String.substr()
(2)兩個字符串的鏈接使用鏈接操做符 (+) 或者 String.concat()
toString()方法將其餘數據類型轉換成 String 類型。但若對 null 或 undefined 進行操做,則會報錯。
String()方法一樣能實現 toString()的效果,而且能夠對 null 和 undefined 進行操做。
原理:先調用 toString(),若是能夠轉換成字符串,就將結果直接返回。否,再進行判斷是 null 仍是 undefined,而後返回‘null' 或 ‘undefined'
符號(Symbols)是ECMAScript 第6版新定義的。符號類型是惟一的而且是 不可修改的,而且也能夠用來做爲Object的key的值。在某些語言當中也有相似的原子類型(Atoms),你也能夠認爲爲它們是C裏面的枚舉類型。