JS資料型別
JS常用資料型別
1.動態型別
JavaScript 是一種弱型別或者說動態語言。這意味著你不用提前宣告變數的型別,在程式執行過程中,型別會被自動確定。這也意味著你可以使用同一個變數儲存不同型別的資料:
var foo = 42;// foo is a Number now foo = "bar"; // foo is a String now foo = true;// foo is a Boolean now
動態型別語言特點是靈活,缺點是犧牲了部分效能。對於動態型別語言,變數型別是可以動態改變的,無法在編譯期確定,因此編譯期的型別檢查比較弱,這將導致很多型別錯誤直到執行期才能發現。
2.資料型別
最新的 ECMAScript 標準定義了 7 種資料型別:
-
6 種原始型別:
Boolean Null Undefined Number String Symbol (ECMAScript 6 新定義)
- Object
3.原始值( primitive values )
除 Object 以外的所有型別都是不可變的(值本身無法被改變)。例如,與 C 語言不同,JavaScript 中字串是不可變的(譯註:如,JavaScript 中對字串的操作一定返回了一個新字串,原始字串並沒有被改變)。我們稱這些型別的值為“原始值”。
布林型別(Boolean)
布林表示一個邏輯實體,可以有兩個值:true 和 false。
Null 型別
Null 型別只有一個值: null,更多詳情可檢視 null 和 Null 。
Undefined 型別
一個沒有被賦值的變數會有個預設值 undefined,更多詳情可檢視 undefined 和 Undefined。
數字型別
根據 ECMAScript 標準,JavaScript 中只有一種數字型別:基於 IEEE 754 標準的雙精度 64 位二進位制格式的值(-(263 -1) 到 263 -1)。它並沒有為整數給出一種特定的型別。除了能夠表示浮點數外,還有一些帶符號的值:+Infinity,-Infinity 和 NaN (非數值,Not-a-Number)。
要檢查值是否大於或小於 +/-Infinity,你可以使用常量 Number.MAX_VALUE 和 Number.MIN_VALUE。另外在 ECMAScript 6 中,你也可以通過 Number.isSafeInteger() 方法還有 Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 來檢查值是否在雙精度浮點數的取值範圍內。 超出這個範圍,JavaScript 中的數字不再安全了,也就是隻有 second mathematical interger 可以在 JavaScript 數字型別中正確表現。
數字型別只有一個整數,它有兩種表示方法: 0 可表示為 -0 和 +0("0" 是 +0 的簡寫)。 在實踐中,這也幾乎沒有影響。 例如 +0 === -0 為真。 但是,你可能要注意除以0的時候:
42 / +0; // Infinity 42 / -0; // -Infinity
字串型別
JavaScript的字串型別用於表示文字資料。它是一組16位的無符號整數值的“元素”。在字串中的每個元素佔據了字串的位置。第一個元素的索引為0,下一個是索引1,依此類推。字串的長度是它的元素的數量。
不同於類 C 語言,JavaScript 字串是不可更改的。這意味著字串一旦被建立,就不能被修改。但是,可以基於對原始字串的操作來建立新的字串。例如:
- 獲取一個字串的子串可通過選擇個別字母或者使用 String.substr().
- 兩個字串的連線使用連線操作符 (+) 或者 String.concat().
注意程式碼中的“字串型別”!
可以使用字串來表達複雜的資料。以下是一些很好的性質:
容易連線構造複雜的字串符
字串容易被除錯(你看到的往往在字串裡)
字串通常是許多APIs的常見標準 (input fields, local storage values, XMLHttpRequest當使用responseText等的時候迴應) 而且他只能與字串一同使用。
按照慣例, 字串一般可以用來表達任何資料結構。這不是一個好主意。例如,使用一個分隔符,一個可以模仿一個列表(一個JavaScript的陣列可能更適合一些) 。不幸的是,當一個分隔符在用於列表中的元素時,打亂了這個列表。 一個轉義字元等。所有這些慣例都變成了一個不存在的維護負擔而沒有正確的工具使用。
表達文字資料和符號資料時候推薦使用字串。當表達複雜的資料時,使用字串解析和適當的縮寫。
符號型別
符號(Symbols)是ECMAScript 第6版新定義的。符號型別是唯一的並且是不可修改的, 並且也可以用來作為Object的key的值(如下). 在某些語言當中也有類似的原子型別(Atoms). 你也可以認為為它們是C裡面的列舉型別. 更多細節請看 Symbol 和 Symbol 。
物件Object
在 Javascript 裡,物件可以被看作是一組屬性的集合。用物件字面量語法來定義一個物件時,會自動初始化一組屬性。(也就是說,你定義一個var a = "Hello",那麼a本身就會有a.substring這個方法,以及a.length這個屬性,以及其它;如果你定義了一個物件,var a = {},那麼a就會自動有a.hasOwnProperty及a.constructor等屬性和方法。)而後,這些屬性還可以被增減。屬性的值可以是任意型別,包括具有複雜資料結構的物件。屬性使用鍵來標識,它的鍵值可以是一個字串或者符號值(Symbol)。
ECMAScript定義的物件中有兩種屬性:資料屬性和訪問器屬性。
資料屬性
資料屬性是鍵值對,並且每個資料屬性擁有下列特性:
資料屬性的特性(Attributes of a data property)
O(∩_∩)O哈哈~基礎還是很重要的。