# Js - Data type and Value ###### tags: `Language-js` ## 前言 1. js的data type是由value決定的,變數本身只是一個記憶體空間。 2. 所以,我們可以視: - variable : 記憶體空間。 - value : 記憶體空間存放值的型態。 - data type : value的類型。 3. js的variable的data type會因為value而變,可以想像成動態的。 ## 一 . Js的data type ### (一) . js所有的data type 1. number : 包含範整數和浮點數。 2. string : 包含字串和字元,js內沒有字元的概念。 3. boolean : 真假值。 4. null : 即一個空值。 5. undefined : 所有宣告的variable未賦予初值下,都為undefined。 6. symbol : js再ES6版後新增的data type。 7. object : 不屬於上六者data type的value即為object,因此object包含array和function。 - 總結一 : js的data type可以分成基礎型態和物件,也可以視為物件和非物件。 ### (二) . variable宣告 1. 命名規則 : - 變數的第一個字母必須為英文字母、底線 _ 或是錢字號 $。 - 後面可以是英文字母、底線 _ 或是錢字號 $ 以及數字。 - 變數名稱不可以是保留字 (Reserved Words) 與關鍵字 (keyword)。 2. 宣告方式 : 僅簡述,object類宣告後有詳述。 - 通則 : 開頭加var。 - number、bool、null是給予值即可。 - string : 可以用單或雙引號夾住。 - object : 可以用{}夾住,內含atrribute和method。 - array : 可以用[]夾住。 - function : 後詳述。 ```javascript= //number bool null var num=7; var b=true; var n=null; //string var str='str'; var str2="string"; //array object var arr= [] ; var obj={ name :" noname"; age : 14;} ``` 3. typeof運算子 : 可以辨別data type。 ```javascript= typeof variable name; ``` ## 二 . Js的基礎data type使用 ### (一) . number 數字 1. c++的整數浮點數都試用於js。 - 整數除以整數可能是小數。 - float的二進位誤差也存在於js。 - Infinity和-Infinity : 同c++,整數除0後出現。 2. NaN的存在 : 即『not a number』的意思。 - 出現 : 0/0、Infinity/Infinity、-Infinity/-Infinity下出現(極限的不定型)。 - 運算 : 加減乘除任何數都為NaN、和任何數比較都為NaN。 - typeof NaN : 仍為number。 3. 辨別NaN的方法 : isNaN()函式。 ### (二) . string 文字 1. 宣告 : 用單引開始必用單引結束,同理雙引。 2. 用法 : - 可以用String(變數),使目標變數強制轉型string。 - 字串中有單引或雙引要用跳脫字元。 - 可以用+連接兩個字串。 ### (三) . boolean 布林 1. 宣告 : true false值給予。 2. 用法: - 可以用Boolean(變數),使目標變數強制轉型boolean。 - 比較運算子中,所有的東西都會轉成bool,後詳述。 - 邏輯運算子中,也會牽扯到bool的轉型,後詳述。 ### (四) . null 和 undefined 1. 宣告 : - null : 給於值。 - undefined : 給予值,宣告未初始的變數皆為undefined。 2. 用法: - 二者的值即data type。 - 二者邏輯上仍有不同: - null : 此變數可能曾經有值,可能沒有值,但現在沒有值。 - undefined : 此變數還沒有給值,所以不知道是什麼。 ```javascript= var a; //a此時為undefined a=null;//a此時為null a=undefined;//a此時為undefined ``` ## 三 . js的object使用 ### (一) . object 1. 宣告 : 用{}包住,內部可含attribute和method。 - js的物件沒有存取權的問題,基本上可以視為c++裡的struct。 2. 用法 : - 取用 : 用『.』運算子。 - 新增 : 用『.』運算子後直接加入。 - 刪除 : 用delete 後加入刪除的屬性或方法。 - 注意 : 要先宣告var為obj才可以用上面三 種用法。 ```javascript= var obj={ name: "test" get : function() {console.log(this.name)} } ``` ```javascript= var obj=[];//var obj;則錯誤。 obj.name="test"; obj.get=function() {console.log(this.name)} ``` ### (二) . array 1. 宣告 : 用[]包住,可以存放不同data type的value。 2. 用法 : - 下標運算子 : 可以用[]存取value。 - 向量使用 : 可以用pop和push的功能。 - 可以用console.log(矩陣名稱)印出整個矩陣。 ```javascript= var arr=[]; arr.push(7); arr.push(8); console.log(arr); ``` ## 四 . js的typeof ### (一) . number、string、boolean ### (二) . null、undefined、object