iT邦幫忙

0

Javascript 進階 3-4 原始型別及物件型別

Javascript 有哪些型別

var a, b, c, d;
a = 1;
a = '文字';
b = true;
c = {};
d = null;
console.log(typeof(b));

以上你看的出來有哪些型別嗎?

這篇文章主要來探討 Javascript 有哪些型別,讓我繼續看下去~

Javascript 的型別可以分為兩大類,分別是 原始型別 以及 物件型別

https://ithelp.ithome.com.tw/upload/images/20191213/20121770kwOHiLFBAK.jpg

原始型別列表如下所示:

https://ithelp.ithome.com.tw/upload/images/20191213/20121770pPR3asj2kg.jpg

接下來主要會以前面5個為主,最後兩個為新的,會在個別討論。

而不同的型別還會有各自的方法去處理個別的資料,為什麼會有這些方法呢?

主要是因為有各自的 包裹物件

回到剛剛最上方的程式碼,我們可以透過上一篇的 typeof 檢查變數的型別

var a, b, c, d;
a = 1;        // number
a = '文字';   // string
b = true;     // boolean
c = {};       // object
d = null;     // object
console.log(typeof(b));

上面要特別說的是,d 雖然被指派為 null,但卻是 object

這是 Javascript 長久以來的錯誤,但沒有修正是因為許多的網站也使用了這樣的錯誤觀念完成了網站。

如果修正的話會造成許多的網站因此而壞掉,所以就把這個錯誤保留了下來。

另外還有一個重點就是 typeof 保護機制

console.log(e); // VM1420:1 Uncaught ReferenceError: e is not defined

console.log(typeof(e)); // undefined

如果在沒有定義 e 這個變數的情境下 console.log 的話,會出現的是 not defined

但如果是使用 typeof 的話則會被定義為 undefined。

這是 typeof 針對 not defined 的保護措施,要特別注意喔。

現在來看另一段範例:

var a = 'ming ';
console.log(a.length);        // 5
console.log(a.toUpperCase()); // MING 
console.log(a.trim());        // ming

上述這些方法都是針對字串所做的,但是直接 console.log(a); 也只有顯示 'ming ',並沒有顯示那些可以用的方法,那我要到哪裡去看有哪些方法可以用呢?

這時候就輪到 包裹物件 登場了!!!

var a = 'ming ';
console.log(a.length);        // 5
console.log(a.toUpperCase()); // MING 
console.log(a.trim());        // ming
console.log(a); // ming 

var e = new String(a);
console.log(a, e);

透過這樣的方式宣告之後,來看看執行的結果

https://ithelp.ithome.com.tw/upload/images/20191213/20121770W27h6IlyUx.jpg

可以看到 proto 就是 e 這個包裹物件的可以用的方法總集

同時同樣可以套用原是型別的字串身上,所以我們剛剛用的 trim/length/toUpperCase都在這裡面喔!

https://ithelp.ithome.com.tw/upload/images/20191213/20121770q9s20OwF7j.jpg

然而,其實並不建議在宣告字串的時候使用字串的 包裹物件 方式宣告,這種宣告方式又稱為 建構式

後續的篇章會講到,而不建議的最大重點在於,透過建構式宣告出來的變數資料型別不會是字串,而是 物件 喔!

這篇文章就先講到這裡~汪汪


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言