iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
自我挑戰組

JavaScript老學徒筆記—馬步篇系列 第 4

【Day3】不可貌相的JS變數型別:基本型別

俗話說:「人不可貌相,海水不可斗量。」就像我們看到郭靖傻不楞登,怎麼知道他武功高強。楊康外表英俊,能言善道,卻一肚子壞水。

變數也跟人一樣,從外觀無法判斷內涵。變數本身沒有型別,它所裝的「值」才有型別。

變數的型別可以分為基本型別 (Primitives)物件型別(Object) 兩類。

變數的基本型別有以下5種:

  • 字串(string)
  • 數字(number)
  • 布林(boolean)
  • null
  • undefined

最重要的是,除了以上幾種之外,其他都是「物件」。

字串string

字串必須用2個單引號''或是2個雙引號包住,二者不可混用。

字串內也可以不放任何字元,稱之為空字串。

字串可以使用+號與其他字串連接。

//字串(string),必須要放在''或是""之中
var guoJing = '降龍十八掌'; 

//空字串
var guoJing = '';

//字串連接可以使用+號
var huangRong = '黃蓉'+'打狗棒法';

//兩個單引號包覆單引號,會出錯
var yangKang = 'He's a bad man';

//改用雙引號包覆單引號,就沒有問題
var yangKang = "He's a bad man";

數字number

不管是整數還是帶有小數點的浮點數在JavaScript中都屬於數字這個類型。

//數字(number),玉山有3952公尺
var jadeMountain = 3952;

但是數字number中有幾個比較特別的類型:

  • infinity 正的無限大,非0的數字除以0,結果都是infinity,例如 3/0會回傳infinity。
  • -infinity 負的無限大,負數除以0,結果都是-infinity,例如-3/0會回傳-infinity。
  • NaN 不是個數字,當遇到無法轉換為數字的狀態,或是無意義的運算,例如0/0,就會回傳NaN。而且NaN與任何數字做運算,回傳的結果都是NaN。

我們可以使用isNaN()來檢查一個變數是不是NaN。

//infinity
console.log(3/0);

//-infinity
console.log(-3/0)

//NaN
console.log(0/0);

//檢查是否為NaN
isNaN('降龍十八掌') //NaN

布林值 boolean

boolean只有二種值:true 和 false。主要用在判斷式,作為程式流程控制之用。

var real = true;
var fake = false;

var more = (100 > 50);  //true

任何值都可以轉為布林值,但我們只要記得會轉為false的值就可以了。

以下幾種會轉為false:false、0、空字串("")、NaN、null以及undefined。

除了上述幾種,其他的值皆為true。

試試看用Boolean()函數將值轉換為布林值:

Boolean(1);  //true
Boolean(0);  //false
Boolean("");  //false
Boolean(null);  //false

null

null代表「空值」,所以要將一個變數的值清除?可以指定那個變數為null。

//郭靖本來的內力值為100分
var guoJing = 100;
console.log(guoJing);  //100

//郭靖中毒後,一點功力都提不起來,內力值為0
var guoJing = null;
console.log(guoJing);  //null

undefined

undefined指的是變數未經宣告,且沒有賦值;或者是有宣告變數,但是沒有給定值的狀態。

var x;
console.log(x); //undefined

引用許國政先生在《0 陷阱!0 誤解!8 天重新認識JavaScript!》為undefined以及null下的註解:

  • undefined代表的是「(此變數)還沒有給值,所以不知道是什麼」。
  • null代表的是「(此變數可能曾經有值,可能沒有值)現在沒有值」

以上就是JavaScript的五種基本型別。


上一篇
【Day2】變數宣告var、let、const的區別
下一篇
【Day4】不可貌相的JS變數型別:如何練成一個物件
系列文
JavaScript老學徒筆記—馬步篇35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言