0%

JS 核心觀念筆記 - 原始型別與物件型別

core

懶人記法:除了原始型別外其他都是物件型別。

原始型別

  • string
  • number
  • boolean
  • null
  • undefinded
  • bigInt(new)
  • symbol(new)

以上型別除了 null 跟 undefinded 外,都有包裹物件 (_proto) 可以使用。

typeof

使用 typeof 可以判斷型別的類型,

1
2
3
4
5
let a = "Tim"; //string
let b = 23; //number
let c = true; //boolean
let d = {}; //object
let e = null; //object

若各自使用 typeof() 會得到後方註解的值。

其中 d 為物件型別,非原始型別。

可是 null 得到的值應該是空值,但卻得到是物件型別,這其實是 JS 長期以來的錯誤,但卻未被修正,原因是已經有許多網站都已經沿用 null 這個錯誤的型別進行網站開發,如果改變其型別,可能許多開發案件會出現許多問題,所以遲遲沒有修正。

對於 not defined 的保護措施

目前沒有宣告 var f 這個變數,如果使用 console.log(f); 會跳錯,若用型別檢視 console.log(typeof f); 則會出現 undefined,這是 JS 對於 not defined 的保護措施。

物件型別

上方提到除了原始型別外,其他都是物件型別,若將上方變數來使用,可以透過該物件的包裹物件方法來檢視這個變數,例如:

檢視物件長度 length

1
2
let a = "Tim";
console.log(a.length); //3

將其值改成大寫 toUpperCase()

1
2
let a = "Tim";
console.log(a.toUpperCase()); //TIM

消除空格 trim()

在 Tim 後面加上空白,透過 trim(); 將空格消除。

1
2
let a = "Tim ";
console.log(a.trim()); //Tim

可自行複製到瀏覽器中的 console 試試看

檢視物件型別的方法

下方有一個物件,透過 console.log 後,會看到瀏覽器有 __proto__

1
2
3
4
5
let obj = {
name: "Tim",
};

console.log(obj);

其中就會看到我可以使用的方法了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{name: "Tim"}
name: "Tim"
__proto__:
constructor: ƒ Object()
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()