js 檢測數據類型的三種方式


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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM