JavaScript 中型別主要分為原始型別和物件型別兩種
原始型別中包含七種型別,
而這些型別有各自的方法,
這些方法可以藉由包裹物件來查看,
其中只有 undefined
和 null
沒有包裹物件,
每個型別所對應的包裹物件如下表所示:
型別 | 包裹物件 |
---|---|
字串(String) | new String() |
數字(Numnber) | new Number() |
布林(Boolean) | new Boolean() |
未定義(Undefined) | - |
空(Null) | - |
整數數值(Bigint) | BigInt() |
(Symbol) | Symbol() |
範例:
var a, b, c;
console.log(typeof a); // undefined
a = 0;
b = 'weiwei';
c = true;
console.log(typeof a); // number
console.log(typeof b); // string
console.log(typeof c); // boolean
從範例可以得知變數在宣告後且尚未賦予值前型別為 undefined
,
隨後賦予不同型別的值,因此使用 typeof
分別會顯示不同的結果
var b = null;
console.log(typeof b); // object
那麼為何 null
的型別為 object
而不是 null
呢?
因為這是 JavaScript 中的一個錯誤,而現在也不能修正這個錯誤,
原因是有許多網站利用這種錯誤來完成的,
一旦修正許多網站都會出錯,所以將錯誤保留至今
console.log(typeof c); // undefined
我們看到變數 c
沒有被定義為何使用 typeof
時不會出錯呢?
因為這是 typeof
的針對未定義變數的保護措施,
因此使用 typeof
對未定義變數取型別時,會顯示 undefined
var a = 'weiwei';
console.log(a.toUpperCase()); // WEIWEI
console.log(a.length); // 5
// 使用包裹物件查尋 a 有哪些方法可以使用
var b = new String(a);
console.log(b);
console.log(typeof b); // object
當我們要查看一個變數有哪些方法使用時,可以使用包裹物件來尋找
我們點開 String 再點開 Prototype 後,
可以看到裡面有許多方法,而範例中使用的 toUpperCase()
和 length
也包含在內,
當我們使用包裹物件宣告變數時,該變數的型別為物件型別
原始型別以外的型別都是物件型別,EX:物件、陣列、函式...
範例:
var a = {};
var b = [];
var c = function(){};
console.log(typeof a); // object
console.log(typeof b); // object
console.log(typeof c); // function
我們會看見 c
的型別為 function
,
function
為物件的子型別,
我們可以使用 instanceof
來確認函式是否為物件的子型別
var c = function(){};
console.log(typeof c); // function
console.log(c instanceof Object); // true
結果為 true
,因此函式也是物件的一種
以上就是今天的內容,我們明天見!!