---
# System prepended metadata

title: Js - Data type and Value
tags: [Language-js]

---

# 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