變數與資料型別 === 變數宣告的規則 --- - 可以宣告為以下: - 英文字母 - 底線 `_` - 錢字號 `$` - 數字(第一個字母不能是數字,放在第一個字母之後可以) - 區分大小寫,例如:變數 app 和 App 在 JavaScript 被認為是兩個不同的變數。 - 自 JavaScript 1.3 之後支援 Unicode,變數名稱可以使用中文命名。 - 基於開發習慣,避免使用非英文字母、底線、$ 以外的字元來命名變數;用中文編碼的話,其他語言的系統開啟可能會變亂碼。 - 不可以是保留字 (Reserved Words) 與關鍵字 (keyword)。 - 保留字:目前沒有特殊用途,但未來可能被拿來當關鍵字使用,所以不能作為變數名稱。 - 關鍵字: ECMAScript 規定具有特定用途的英文單字,不能作為變數名稱使用。 - 通常在編輯器中,會以深藍色表示。 變數宣告 --- - ES6 以前,宣告變數使用 var。 - ES6 之後,宣告「變數」使用 let、宣告「常數」使用 const。 ### 變數沒有型別,值才有。 JavaScript 是「弱型別」語言,變數本身無需宣告型別,型別的資訊只在值或物件本身,變數用作取得值或物件的參考。 換言之,變數宣告後資料型態未定,真正的資料型態將視指派給變數的內容值而定。 ```jsx // 宣告變數 n,沒有給值,此時 n 的內容為 undefined。 var n; // 宣告變數 m 的同時給值,此時 m 的內容為數字的 1。 var m = 1; ``` 沒有宣告變數的情況下使用,出現 ReferenceError 的錯誤:  ### 強型別 vs 弱型別 在程式語言中,依照語言的型別系統 (Type system) 分成「強型別語言」與「弱型別語言」。 強型別是指「程式所定義的變數型別,等於變數在執行時期的型別」。變數在被宣告的時候,必須指定資料型別給它,如果對變數做了錯誤型別的運算,就會出現錯誤。 弱型別正好相反,雖然取得語法簡潔的優點,但要注意型態轉換時產生非預期的問題。 ### 全域變數 即便變數在事前沒有透過 var 宣告,仍可以給定變數初始值。 ```jsx m = 1; // 對未宣告的變數 m 賦值 console.log(m); // 能夠讀取到 m 值,打印 1 ``` 強烈不建議這麼做,因為會變成全域變數,作用域過大導致全域汙染變數。 變數的資料型別 --- ES5.1 時 JavaScript 內建的型別,主要分成基本型別 (Primitives) 與物件型別 (Object) 。 基本型別又分成 string、number、boolean、null、undefined、Symbol(ES6 新增),其餘歸類至物件型別 (Object)。 - 基本資料型態 - 數值 ([number](https://hackmd.io/FwIFl5ACRVywK6IVx6JYhQ?view)) 型態:浮點數 (ex. `-4.81`, `123.45`) - 字串 ([string](https://hackmd.io/IwbQ8U8kQkq1lZCQJRsLkg?view)) 型態:ex. `"JaveScript"` - 布林 ([boolean](https://hackmd.io/Q-bczOJlTS6rEm5Q7jY8XQ?view)) 資料型態:ex. `true`, `false` - 特殊資料型態 - [null](https://hackmd.io/mDulQZcUSEqlJMEebDd2Vg?view) 型態:沒有值,將 null 指派給變數可以清空變數 - 未定義值 ([undefined](https://hackmd.io/mDulQZcUSEqlJMEebDd2Vg?view)) 型態:宣告時未指定初值或不存在的變數 - [Symbol](https://hackmd.io/yofCf-UWR-iiF_6Vg0Sn2w?view) - 多值資料型態 - [物件](https://hackmd.io/tXyM_Av0SyW4OkDH1jYO0A?view) - [陣列](https://hackmd.io/8pRUj7G9TMaol3M2O3vZaQ?view) ### 透過 typeof 運算子,判斷型別 判斷型別的方式,可以透過 typeof 運算子,但有時需要處理例外。 - 數值型態 `number` - 字串型態 `string` - 布林型態 `boolean` - 未定義型態 `undefined` - 對 JavaScript 內建型態(Date)或函式(parseInt) `function` - 對 reference 型態 `object` ```jsx typeof 123; // 'number' typeof 'Kuro'; // 'string' typeof true; // 'boolean' typeof Date; // 'function' typeof parseInt; // 'function' typeof {}; // 'object' typeof []; // 'object' typeof(new Date()); // 'object' // 下面兩個要特別注意 typeof window.alert; // 內建函式,所以是 'function' typeof null; // 'object' ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up