為何需判斷型別,其因為電腦在執行時,需先判斷資料是何種型別,才可採取運算方式。例如數字123與字串的123的處理方式。
除了基本型別(Primitives)外,剩餘的皆為物件型別(Object)
number、string、boolean、null、undefined、symbol
undefined vs null
null 是基本型別之一,但 typeof null 卻得到 object,而非 null!
可用 typeof 來檢測值的資料型別(typeof回傳都會是字串)
typeof 1234567; // 'number'
typeof 'Hello World!'; // 'string'
typeof true; // 'boolean'
typeof null; // 'object'
typeof undefined; // 'undefined'
typeof Symbol(); // 'symbol'
可使用 new Object() 建立物件
或使用大括號{}直接寫入物件與其值(此種方式稱 物件實字 Object literal)
物件存取方式可透過 「.」點 或是 [ ]中刮號 進行存取(若物件所引有空白字串或數字,則使用中括號存取)
可使用 in運算子 與 hasOwnProperty() 方法,判斷物件的屬性是否存在
在 JS 中並沒有 Array 這個型別,它一樣屬於物件,其在記憶體中的位置也不是連續的。
長度由length屬性取得,且其屬性值可被覆寫(字串length則無法覆寫),故長度可隨時增減,且就算指定索引元素,也無須連續指定
可使用 isArray() 方法判斷是否為陣列
function greet() {
console.log('Hello');
}
greet.language = 'english';
輸入 console.log(greet.language),則是會顯示 greet.language 的值
這樣的例子說明了,function只是一種特殊的物件,它可以被當作物件來使用。
null 是基本型別之一,但 typeof null 卻得到 object,而非 null!
function 是物件的子型別,但 typeof function() {} 是得到 function 而非 object
NaN 表示是無效的數字,但依舊還是數字,因此在資料型別的檢測 typeof NaN 結果就是 number,不要被字面上的意思「不是數字」(not a number)給弄糊塗了。另外,NaN 與任何數字運算都會得到 NaN,並且 NaN 不大於、不小於也不等於任何數字,包含 NaN 它自己。
var a = true;
var b = 'undefined';
var c = 1;
var d = null;
var e = NaN;
Ans:boolean / string / number / object / number
請問當使用了 new Number() 建立資料後,此時使用 typeof() 會出現什麼型別?
Ans:object
在以下代碼中,typeof a和typeof b的值分別是什麼:
function foo() {
let a = b = 0;
a++;
return a;
}
foo();
typeof a;
typeof b;
Ans:typeof a是 'undefined'。變數a僅在 foo()範圍內宣告,在外部不可用。
typeof b等於'number'。因b無宣告,故b汙染全域變數。