iT邦幫忙

2024 iThome 鐵人賽

DAY 3
2
Modern Web

JavaScript學習筆記系列 第 3

[Day 03] 變數、資料型別及判斷型別

  • 分享至 

  • xImage
  •  

要看規範

開始介紹前,先說說在好想學習時要培養查閱規範(Specification)的習慣,例如ECMAScript或是MDN,這些都是第一手資訊。MDN也推薦看英文版,因為英文版跟中文版會有不同,英文版比較詳細~所以這30天主要參考來源都來自MDN規範,連結也會一併放在最後的參考資料方便查找。

變數

變數就像是一個的容器,隨時存取裡面的資料。

變數命名規則:

  1. 第一個字母可以是英文大小寫、下底線_、錢字號$,不能使用數字開頭。
  2. 大小寫不同會視為不同變數,例如:hello和Hello,因為這兩者字母h和H是不同的,就代表不同變數。
  3. 變數名稱不能使用保留字,例如:classfunction等。

常見JS變數命名方式:

  1. 駝峰式:單字與單字直接連接,又分成大駝峰式和小駝峰式
  • 大駝峰(upper camel case):每個單字的開頭字母為大寫。
MyHeight
TotalPrice
  • 小駝峰(lower camel case):第一個單字開頭字母為小寫,後面每個單字開頭字母大寫。
userName
myHomePage
  1. 蛇型命名法(snake_case)
    使用下底線_連接單字,每個單字開頭字母皆小寫。
user_name
my_home_page

資料型別

在JavaScript 中的資料型別分成兩大類:基本型別(Primitive types)和物件型別(Object types)。

1. 基本型別(Primitive types)

基本型別是不可變(immutable)的值,如創造變數並賦值,此值就不可變,若有修改、刪除等變更則回傳新值。

JavaScript 的7種基本型別:

  • Number數值:包含整數和浮點數,例如:7、3.14
  • String字串:文字資料,例如:"Hello"
  • Boolean布林值:值只有 true 或 false
  • Undefined:變數被宣告但未賦值時,預設值是 undefined
  • Null:表示「空」或「現在沒有值」
  • Symbol:一種唯一且不可變的值
  • BigInt:提供比 Number 型別更大範圍的整數,例如:123n

範例

嘗試修改字串第一個字母,字串並沒有變更,因為基本型別為不可變(immutable)。

let str = "hello world";
str[0] = "H"; //第一個字母h改成H
console.log(str); // hello world,第一個字母沒有變

當修改基本型別的值,則會創造一個新值,並把變數「指向」新值。

let name = "Peter";
name = "David";
console.log(name); // "David"

所以原本的"Peter"並沒有被修改,而是創造新值"David",重新賦值給變數name。

2. 物件型別(Object types)

基本型別以外的都是物件型別,物件型別是可變(mutable)的,能儲存多個值和複雜資料結構。

  • Object:複合型別,用來儲存多個屬性和方法
  • Array:用來儲存有序的資料列表
  • Function:一種特殊物件,可以被呼叫執行程式碼
  • Date:用來處理時間和日期
  • RegExp:正規表達式,將文字與模式進行比對

判斷型別的方法

  1. typeof判斷
console.log(typeof 7);        // "number"
console.log(typeof "Jeshua");   // "string"
console.log(typeof true);      // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null);      // "object" (歷史中的bug);           
console.log(typeof [1,2,3]);   // "object"
console.log(typeof {a: 5});    // "object"
console.log(typeof function(){}); // "function"

注意:typeof 回傳的是「字串」!之前都沒注意到XD

typeof無法辨別物件,例如:Array回傳"object"而不是"Array"
function回傳是"function",其實function是屬於特殊物件,是可以被呼叫的物件,因此屬於物件

MDN:
The Function object provides methods for functions. In JavaScript, every function is actually a Function object.

剛剛typeof判斷陣列時,會得到"object",那如果要準確判斷陣列要怎麼處理?
可以使用Array.isArray()方法,來判斷是否為陣列,例如:

console.log(Array.isArray([5, 7]));  // true
console.log(Array.isArray([]));      // true
console.log(Array.isArray("Elijah")); // false
console.log(Array.isArray({a: 1}));  // false
console.log(Array.isArray(123));     // false

返回布林值:true,表示該值是陣列,false 則表示不是。

參考資料

MDN - JavaScript data types and data structures
MDN - Reserved words保留字
重新認識 JavaScript: Day 03 變數與資料型別
重新認識 JavaScript: Day 04 物件、陣列以及型別判斷
wikipedia - 駝峰式大小寫
wikipedia - 蛇型命名法


上一篇
[Day 02] 在Linux系統建置Node.js執行環境
下一篇
[Day 04] if/else 流程判斷
系列文
JavaScript學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

2
Chris
iT邦新手 3 級 ‧ 2024-09-17 12:35:15

JS 變數 不支援烤肉串命名

Fang iT邦新手 5 級 ‧ 2024-09-18 12:53:26 檢舉

好的!已修改

Chris iT邦新手 3 級 ‧ 2024-09-19 11:35:54 檢舉

我以為你會註記,結果是刪掉了 XDD

Fang iT邦新手 5 級 ‧ 2024-10-03 12:21:16 檢舉

想說會誤導~~

1
jeremykuo
iT邦新手 5 級 ‧ 2024-09-17 12:57:21

上次跟Chris討論到的,超酷的fun fact!

Array.isArray(Array.prototype); //true
Chris iT邦新手 3 級 ‧ 2024-09-19 11:35:10 檢舉

/images/emoticon/emoticon75.gif

Fang iT邦新手 5 級 ‧ 2024-10-03 12:22:29 檢舉

/images/emoticon/emoticon12.gif

我要留言

立即登入留言