基本類型依然可以使用引用類型屬性

在基本類型依然可以使用引用類型屬性

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, stringnumber,但要注意是return會是不同類型以及不同參數會有不同行為。

使用這種方式來實現類型,會覺得很麻煩,為何我們不直接使用 function () {...}, {}, true, 'name', 2

記住 7種 Data Types,5個false,內存 Memory