1、typeof
typeof 用以獲取一個變量或者表達式的類型,typeof 一般只能返回如下幾個結果:
typeof "John" // 返回 string typeof 3.14 // 返回 number typeof NaN // 返回 number typeof false // 返回 boolean typeof [1,2,3,4] // 返回 object typeof {name:'John', age:34} // 返回 object typeof new Date() // 返回 object typeof function () {} // 返回 function typeof myCar // 返回 undefined (如果 myCar 沒有聲明) typeof null // 返回 object
請注意:
- NaN 的數據類型是 number
- 數組(Array)的數據類型是 object
- 日期(Date)的數據類型為 object
- null 的數據類型是 object
- 未定義變量的數據類型為 undefined
如果對象是 JavaScript Array 或 JavaScript Date ,我們就無法通過 typeof 來判斷他們的類型,因為都是 返回 object。
我們可以使用 typeof 來獲取一個變量是否存在,如 if(typeof a!="undefined"){},而不要去使用 if(a) 因為如果 a 不存在(未聲明)則會出錯。
正因為 typeof 遇到 null,數組,對象時都會返回 object 類型,所以當我們要判斷一個對象是否是數組時。
或者判斷某個變量是否是某個對象的實例則要選擇使用另一個關鍵語法 instanceof。
2、instanceof
可通過 instanceof 操作符來判斷對象的具體類型,語法格式:
var result = objectName instanceof objectType
返回布爾值,如果是指定類型返回 true,否則返回 false:
例:
arr = [1,2,3]; if(arr instanceof Array){ document.write("arr 是一個數組"); } else { document.write("arr 不是一個數組"); }
3、constructor 屬性
constructor 屬性返回所有 JavaScript 變量的構造函數。
"John".constructor // 返回函數 String() { [native code] } (3.14).constructor // 返回函數 Number() { [native code] } false.constructor // 返回函數 Boolean() { [native code] } [1,2,3,4].constructor // 返回函數 Array() { [native code] } {name:'John', age:34}.constructor // 返回函數 Object() { [native code] } new Date().constructor // 返回函數 Date() { [native code] } function () {}.constructor // 返回函數 Function(){ [native code] }
你可以使用 constructor 屬性來查看對象是否為數組 (包含字符串 "Array"):
function isArray(myArray) { return myArray.constructor.toString().indexOf("Array") > -1; }
你可以使用 constructor 屬性來查看對象是否為日期 (包含字符串 "Date"):
function isDate(myDate) { return myDate.constructor.toString().indexOf("Date") > -1; }