# 第三關:變數型別判斷與弱型別轉型
請觀看此文章後,解答以下題目。
# 第一題
請依序告知以下 console.log 會顯示什麼值。
var a = 1;
console.log(typeof(a));
var b = "hello";
console.log(typeof(b));
var c = 1 + "hello";
console.log(typeof(c));
var d = 1 + "11";
console.log(d);
console.log(typeof(d));
2
3
4
5
6
7
8
9
10
11
12
參考解答:
第一個 console.log 顯示為 number
第二個 console.log 顯示為 string
第三個 console.log 顯示為 string
第四個 console.log 顯示為 111 (字串)
第五個 console.log 顯示為 string
說明:
第三個為數字與字串相加,後面因為是字串,所以會把前面數字轉為字串做處理
第四個原因同第三個,字串加字串顯示會是合併顯示,而不是相加,數字加數字才會顯示 12
第五個原因同第四個,因為轉成字串處理了,所以型態是字串
補充說明:
typeof() 運算子會回傳回一個字串值,回傳值代表的是此值的型別
參考網址: typeof
# 第二題
var a;
a = a + "hello";
console.log(a);
console.log(typeof(a));
var b = 3;
console.log(b * "hello");
2
3
4
5
6
7
參考解答:
第一個 console.log 顯示為 undefinedhello
第二個 console.log 顯示為 string
第三個 console.log 顯示為 NaN
說明:
第一個 宣告了變數 a,但是 a 未賦予任何值,所以 a 值會是 undefined,然後字串 undefined 與 hello 合併,就會顯示 undefinedhello
第三個 宣告了變數 b 賦予值為數字 3,但是 hello 是字串,數字無法與字串相乘,所以顯示 NaN
補充說明:
NaN 全名為「Not a Number」,不是一個數字的意思
# 第三題
var a = 9;
console.log(a + 9);
console.log(a + '9');
var b = "9";
console.log(b * b);
console.log(typeof(b * b));
2
3
4
5
6
7
參考解答:
第一個 console.log 顯示為 18 (數字)
第二個 console.log 顯示為 99 (字串)
第三個 console.log 顯示為 81 (數字)
第四個 console.log 顯示為 number
說明:
第一個 console.log 宣告了變數 a 並賦予值為數字 9,9 + 9 = 18
第二個 console.log 數字 9 加字串 9,原因跟第一題一樣,會把前面數字轉為字串做處理,所以會合併處理顯示 99
第三個 console.log 宣告了變數 b 並與與值為字串 9,當遇到運算值符號會(+-*/)會讓字串轉為字元做運算(前提是字串內容是數字),所以 9 * 9 = 81
第四個 console.log 因第三個的關係,所以型態是 number