前端筆記-JavaScript-原始型別及物件型別
JavaScript 總共有八種型別:
- string
- number
- null
- undefined
- boolean
- BigInt(new)
- Symble(new)
- object
除了 object(物件)是物件型別以外,其他都是原始型別,而 BigInt 與 Symble 較特殊在此先不討論,因為我還沒學到,啊哈哈。
原始型別(Primitive Data Type)
var str = '文字'
typeof str // stringvar num = 123
typeof num // numbervar isBoolean = true
typeof isBoolean // booleanvar isUndefined
typeof isUndefined //undefinedvar isNull = null
typeof isNull // object
原始型別的特色就是只有一個值,沒有屬性,基本上直接使用『type of』 就能顯示型別,除了『null』,照理說型別是 null ,使用 type of 會顯示 『object』 ,那是 JavaScript 早期的老錯誤,但也無法更改,因為有很多應用是用此判斷來執行,修改了程式會無法運行。
包裹物件
相信大家在使用原始型別的時候,也會知道它們都會有各自的一些方法,像以字串來說,就有轉大寫、長度、去除空格等方法
var str = 'Hello World! ';
console.log(str.toUpperCase()); //HELLO WORLD!
console.log(str.length); //13
console.log(str.trim()); //Hello World! (去除後方空格)
而為什麼它們可以使用這些方法呢?就是因為他們都有各自的包裹物件,而這些包裹物件裡就有包含他們對應型別可以使用的方法
怎麼看到包裹物件的方法
var ming = '小明'
console.log(ming); // 小明
我們宣告 ming 是一個字串,當我們直接呼叫 ming 的時候只會回傳小明,不會有任何方法,我們用另外一種方式來宣告看看
var ming = new String('小明');
console.log(ming); // String {"小明"} ,以及它的方法
我們可以看到使用這種方法就可以看到這個字串物件有 __proto__ 原型,裡面就有原型對應的方法了!所以我們在操作原始型別的時候,其實它就會套用這些包裹物件了,所以原始型別可以使用包裹物件裡的所有方法!
盡量不要使用這種方式宣告
var ming = new String('小明');
console.log(typeof ming); // object
使用這種方式來宣告一個字串,我們稱為『建構式』雖然可以使用字串的包裹物件方法,但使用 typeof 來查看,會發現它是一個物件而不是字串,也就是說這種方式宣告出來的物件不會是原始型別,而是物件型別,跟原始型別的操作會有些差異。