在基本類型依然可以使用引用類型屬性
let n = 9;
n.xxx = 10;
n.xxx = ? // undefined
為什麼呢?因為在JS歷史中,作者的老闆要他設計成像JAVA語法,所以才有現在String()
, Number()
, Boolean()
, new
, this
等等…
但為了方便作者設計一個基本類型來表示,例如 let n = 9;
那基本類型可以使用 n.toString()
? 答案是可以!
JS會幫我們創建一個臨時轉換,然後釋放
let n = 9;
n.toString();
tmp = new Number(9);
tmp.toString() // '1'
再來看第一個例子
// 基本類型
let str = 'decadehew';
str[0] // 為什麼 Q1?
// 複雜類型
let newStr = new String('newDecadehew');
newStr[0] // 為什麼 Q2
解題:
Q1:str
只是字串,當我們讀取 str[0] -> d
, 實際上是調用臨時對象 (String)
。
Q2:newStr
變數是由 JS 標準內置對象所創建的。
再來看第二例子
let f = false;
let f2 = new Boolean(false);
if (f) console.log(1);
if (f2) console.log(2);
解題:
答案是 2
!為什麼?是因為 f
是基本類型,f2
是引用類型 (Object)。
在JS裡空對象都是true
。
總結
根據以上例子,我們知道可以直接使用Object
的屬性,因為JS會幫我們創建和調用臨時對象讓我們也可以享用對應對象的屬性,然後再釋放它。
我們也可以通過 new build-in Object
來實現我們 function
, object
, boolean
, string
和 number
,但要注意是return
會是不同類型以及不同參數會有不同行為。
使用這種方式來實現類型,會覺得很麻煩,為何我們不直接使用 function () {...}
, {}
, true
, 'name'
, 2
。
記住 7種 Data Types,5個
false
,內存 Memory